算法筆記(17)數(shù)據(jù)表達(dá)及Python代碼實(shí)現(xiàn)

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

原始數(shù)據(jù)

使用啞變量轉(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)
經(jīng)過get_dummies轉(zhuǎn)化的水果數(shù)據(jù)集

使用get_dummies對數(shù)值特征進(jìn)行轉(zhuǎn)換

fruits['數(shù)值特征'] = fruits['數(shù)值特征'].astype(str)
pd.get_dummies(fruits, columns=['數(shù)值特征'])
get_dummies轉(zhuǎn)換數(shù)值特征的結(jié)果

首先用.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()
特征裝箱之前的MLP回歸和KNN回歸

特征裝箱之后的MLP回歸和KNN回歸

結(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ù),所以不需要再使用裝箱操作。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容