本節(jié)講述數(shù)據(jù)表達(dá)方法:(1)使用啞變量轉(zhuǎn)化類型特征(2)對數(shù)據(jù)進(jìn)行裝箱處理

使用啞變量轉(zhuǎn)化類型特征
啞變量:用來把某些類型變量轉(zhuǎn)化為二值變量的方法。
下面使用get_dummies來將類型特征轉(zhuǎn)化為只有0和1的二值數(shù)值特征。默認(rèn)情況下是不會對數(shù)值特征進(jìn)行轉(zhuǎn)換的。
fruits = pd.DataFrame({'數(shù)值特征':[5,6,7,8,9],
'類型特征':['西瓜','香蕉','桔子','蘋果','葡萄']})
fruits_dum = pd.get_dummies(fruits)
display(fruits_dum)

使用get_dummies對數(shù)值特征進(jìn)行轉(zhuǎn)換
fruits['數(shù)值特征'] = fruits['數(shù)值特征'].astype(str)
pd.get_dummies(fruits, columns=['數(shù)值特征'])

首先用.astype(str)指定了“數(shù)值特征”這一列是字符串類型的數(shù)據(jù),然后在get_dummies中指定columns參數(shù)為“數(shù)值特征”這一列,這樣get_dummies就會只轉(zhuǎn)化數(shù)值特征了。
對數(shù)據(jù)進(jìn)行裝箱處理
利用one-hot編碼來表達(dá)已經(jīng)裝箱的數(shù)據(jù)
one-hot編碼優(yōu)點(diǎn):將離散型特征使用one-hot編碼,確實(shí)會讓特征之間的距離計(jì)算更加合理。
下面分別用MLP算法和KNN算法對數(shù)據(jù)集進(jìn)行回歸分析
Python代碼實(shí)現(xiàn):
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()


結(jié)果分析:MLP的回歸模型變得更復(fù)雜,KNN模型變得更簡單。對樣本特征進(jìn)行裝箱的一個(gè)好處:它可以糾正模型過擬合或者欠擬合的問題。尤其是當(dāng)針對大規(guī)模高維度的數(shù)據(jù)集使用線性模型的時(shí)候,裝箱處理可以大幅提高線性模型的預(yù)測準(zhǔn)確率。
注意:對于樣本數(shù)據(jù)進(jìn)行裝箱的操作對于基于決策樹的算法(如隨機(jī)森林、梯度上升決策樹,當(dāng)然也包括決策樹本身)沒有太多的作用,因?yàn)檫@類算法本身就是不停在拆分樣本的特征數(shù)據(jù),所以不需要再使用裝箱操作。