数据表达 : 有时,我们通过对数据集原来的特征进行转换,生成新的"特征"或者说成分,会比直接使用原始的特征效果要好,即数据表达(data representation)
1.使用哑变量转化类型特征
哑变量(Dummy Variables) : 也被称为虚拟变量,用来把某些类型变量转化为二值变量的方法.
############################# 使用哑变量转化类型特征 ####################################### #导入pandas import pandas as pd #手工输入一个数据表 fruits = pd.DataFrame({'数值特征':[5,6,7,8,9],'类型特征':['西瓜','香蕉','橘子','苹果','葡萄']}) #显示fruits数据表 display(fruits)
#转化数据表中的字符串为数值 fruits_dum = pd.get_dummies(fruits) #显示转化后的数据表 display(fruits_dum)
#令程序将数值也看作字符串 fruits['数值特征'] = fruits['数值特征'].astype(str) #在用get_dummies转化字符串 pd.get_dummies(fruits,columns=['数值特征'])
2.对数据进行装箱处理
############################# 对数据进行装箱处理 ####################################### #导入numpy import numpy as np #导入画图工具 import matplotlib.pyplot as plt #生成随机数列 rnd = np.random.RandomState(38) x = rnd.uniform(-5,5,size=50) #向数据中添加噪声 y_no_noise = (np.cos(6*x) + x) X = x.reshape(-1,1) y = (y_no_noise + rnd.normal(size=len(x)))/2 #绘制图形 plt.plot(X,y,'o',c='r') #显示图形 plt.show()
#导入神经网络 from sklearn.neural_network import MLPRegressor #导入KNN from sklearn.neighbors import KNeighborsRegressor #生成一个等差数列 line = np.linspace(-5,5,1000,endpoint=False).reshape(-1,1) #分别用两种算法拟合数据 mlpr = MLPRegressor().fit(X,y) knr = KNeighborsRegressor().fit(X,y) #绘制图形 plt.plot(line,mlpr.predict(line),label='MLP') plt.plot(line,knr.predict(line),label='KNN') plt.plot(X,y,'o',c='r') plt.legend(loc='best') #显示图形 plt.show()
#设置箱体数为11 bins = np.linspace(-5,5,11) #将数据进行装箱操作 target_bin = np.digitize(X,bins=bins) #打印装箱数据范围 print('装箱数据范围: {}'.format(bins)) #打印前十个数据的特征值 print(' 前十个数据点的特征值: {}'.format(X[:10])) #找到它们所在的箱子 print(' 前十个数据点所在的箱子: {}'.format(target_bin[:10]))
#导入独热编码 from sklearn.preprocessing import OneHotEncoder onehot = OneHotEncoder(sparse = False,categories='auto') onehot.fit(target_bin) #使用独热编码转化数据 X_in_bin = onehot.transform(target_bin) #打印结果 print('装箱后的数据形态:{}'.format(X_in_bin.shape)) print(' 装箱后的前十个数据点: {}'.format(X_in_bin[:10]))
#使用独热编码进行数据表达 new_line = onehot.transform(np.digitize(line,bins=bins)) #使用新的数据来训练模型 new_mlpr = MLPRegressor().fit(X_in_bin,y) new_knr = KNeighborsRegressor().fit(X_in_bin,y) #绘制图形 plt.plot(line,new_mlpr.predict(new_line),label='New MLP') plt.plot(line,new_knr.predict(new_line),label='New KNN') plt.plot(X,y,'o',c='r') #设置图注 plt.legend(loc='best') #显示图形 plt.show()
总结 :
使用哑变量转化类型特征是为了把字符串类型的特征转化为数值特征,以便于我们可以使用算法进行分类回归预测.
对样本特征进行装箱处理有一个好处 : 它可以纠正模型过拟合或者欠拟合的问题.尤其是当针对大规模高维数据集使用线性模型的时候,装箱处理可以大幅提高线性模型的预测准确率.
文章引自 : 《深入浅出python机器学习》