原标题:数据表达
原文来自:博客园 原文链接:https://www.cnblogs.com/weijiazheng/p/10953449.html
数据表达 : 有时,我们通过对数据集原来的特征进行转换,生成新的"特征"或者说成分,会比直接使用原始的特征效果要好,即数据表达(data representation)
1.使用哑变量转化类型特征
哑变量(Dummy Variables) : 也被称为虚拟变量,用来把某些类型变量转化为二值变量的方法.
?
1 2 3 4 5 6 7 | import pandas as pd
fruits = pd.DataFrame({ '数值特征' :[ 5 , 6 , 7 , 8 , 9 ], '类型特征' :[ '西瓜' , '香蕉' , '橘子' , '苹果' , '葡萄' ]})
display(fruits)
|
?
1 2 3 4 | fruits_dum = pd.get_dummies(fruits)
display(fruits_dum)
|
?
1 2 3 4 | fruits[ '数值特征' ] = fruits[ '数值特征' ].astype( str )
pd.get_dummies(fruits,columns = [ '数值特征' ])
|
2.对数据进行装箱处理
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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()
|
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | from sklearn.neural_network import MLPRegressor
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()
|
?
1 2 3 4 5 6 7 8 9 10 | bins = np.linspace( - 5 , 5 , 11 )
target_bin = np.digitize(X,bins = bins)
print ( '装箱数据范围:n{}' . format (bins))
print ( 'n前十个数据点的特征值:n{}' . format (X[: 10 ]))
print ( 'n前十个数据点所在的箱子:n{}' . format (target_bin[: 10 ]))
|
?
1 2 3 4 5 6 7 8 9 | 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 ( 'n装箱后的前十个数据点:n{}' . format (X_in_bin[: 10 ]))
|
?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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机器学习》
免责声明:本文来自互联网新闻客户端自媒体,不代表本网的观点和立场。
合作及投稿邮箱:E-mail:editor@tusaishared.com