sklearn综合示例9:分类问题的onehot与预测阈值调整

本文详细介绍了如何在sklearn中进行数据预处理,特别是onehot编码,以及如何调整分类算法如LR的预测阈值来优化模型性能。文中还涉及到SVM、决策树和Tensorflow深度学习模型的应用。
摘要由CSDN通过智能技术生成

本文介绍了:

  1. 如何将多个标签做onehot,比如说总共有1000个标签,用户带了其中100个标签,那就是一个1000维的feautre,其中100维=1,其余900维=0。
  2. 调整分类算法的分类阈值,比如将LR中的默认阈值从0调整到0.9,降低recall提升精度。
  3. 各种算法的使用方式。

1、数据预处理

样本格式

最终得到的样本格式如下,第一列是label,第二列是一“|”分割的一些特征,可以理解为用户观看了哪部电影,喜欢哪本书,关注了哪个微博id等。
label,features
1,20018
0,20006|20025
1,1509|8713|2000341|9010
我们读取数据后,将数据做onehot。比如总共有10000个标签,如果设备带了其中1000个,则标签有10000列,其中1000列为1,其余为0.

import pandas as pd
import sklearn
import numpy as np
from sklearn.preprocessing import MultiLabelBinarizer

载入数据

sample_dir = '/home/ljhn1829/jupyter_data/sklearn_onehot_threshold.csv'
df_sample_all = pd.read_csv(sample_dir)
print(df_sample_all.head())
   label                                           features
0      1                                            2001841
1      0                                    2000641|2002541
2      1  1509|871305|2000341|901005|147409|132905|13560...
3      1  1034005|20909|9505|1083505|69209|19109|10905|9...
4      1  148009|4109|3809|169105|685006|62409|99805|200...

onehot

除了本文的sklearn方式外,也可以使用pandas.get_dummies()。但数据量比较大,而且稀疏时,建议使用sklearn。

见《sklearn系列之2:数据预处理》及https://stackoverflow.com/questions/63544536/convert-pd-get-dummies-result-to-df-str-get-dummies

mlb = MultiLabelBinarizer(sparse_output=True)
onehot_output = pd.DataFrame.sparse.from_spmatrix(mlb.fit_transform(df_sample_all['features'].str.split('|')),
                                           columns=mlb.classes_)
df_sample_onehot_all = pd.DataFrame()
df_sample_onehot_all['label'] = df_sample_all['label']
df_sample_onehot_all= pd.concat([df_sample_onehot_all,onehot_output], axis=1)
print(df_sample_onehot_all.head())
   label  1000005  100008  100009  10001  1000108  10002  1000208  10005  \
0      1        0       0       0      0        0      0        0      0   
1      0        0       0       0      0        0      0        0      0   
2      1        0       0       0      0        0      0        0      0   
3      1        0       0       0      0        0      0        0      0   
4      1        0       0       0      0        0      0        0      0   

   10007  ...  998805  999008  99905  99908  99909  999505  999508  999708  \
0      0  ...       0       0      0      0      0       0       0       0   
1      0  ...       0       0      0      0      0       0       0       0   
2      0  ...       0       0      0      0      0       0       0       0   
3      0  ...       0       0      0      0      0       0       0       0   
4      0  ...       0       0      0      0      0       0       0       0   

   999805  999808  
0       0       0  
1       0    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值