强烈推荐!分享一个持续连载的《特征工程小锦囊》项目,代码已开源!
隨著我們?cè)跈C(jī)器學(xué)習(xí)、數(shù)據(jù)建模、數(shù)據(jù)挖掘分析這條發(fā)展路上越走越遠(yuǎn),其實(shí)越會(huì)感覺(jué)到特征工程的重要性,平時(shí)我們?cè)诤芏嗟胤蕉紩?huì)看到一些很好的特征工程技巧,但是都會(huì)是一個(gè)完整項(xiàng)目去閱讀,雖然說(shuō)這樣子也可以學(xué)習(xí)挖掘思路,但有的時(shí)候濃縮的技巧總結(jié)也是十分重要!
GitHub上有一個(gè)專門針對(duì)特征工程技巧的“錦囊”,叫做《Tips-of-Feature-engineering》,作者把網(wǎng)路上、書本上的一些特征工程的項(xiàng)目,抽取其中的挖掘技巧,并把這些小技巧打包成一個(gè)又一個(gè)的小錦囊,供大家去檢索并且學(xué)習(xí),還蠻不錯(cuò)的!
項(xiàng)目地址為:
https://github.com/Pysamlam/Tips-of-Feature-engineering
大家可以先看看目前更新到的內(nèi)容明細(xì):
項(xiàng)目目前更新到19節(jié),一般來(lái)說(shuō)是每天一更新,每一節(jié)都會(huì)有配套的數(shù)據(jù)集以及代碼,下面我們拿幾個(gè)“錦囊”來(lái)看一下!
Tip8:怎么把幾個(gè)圖表一起在同一張圖上顯示?
這里是使用泰坦尼克號(hào)的數(shù)據(jù)集,前期我們做EDA的時(shí)候需要探查數(shù)據(jù)的分布,從而發(fā)現(xiàn)其中的規(guī)律,這一節(jié)的技巧就是教我們?nèi)绾萎嬕恍┏R姷膱D形,同時(shí)顯示在同一張圖上。
關(guān)鍵代碼
import matplotlib.pyplot as plt# 設(shè)置figure_size尺寸 plt.rcParams['figure.figsize'] = (8.0, 6.0)fig = plt.figure()# 設(shè)定圖表顏色 fig.set(alpha=0.2)# 第一張小圖 plt.subplot2grid((2,3),(0,0)) data_train['Survived'].value_counts().plot(kind='bar') plt.ylabel(u"人數(shù)") plt.title(u"船員獲救情況 (1為獲救)")# 第二張小圖 plt.subplot2grid((2,3),(0,1)) data_train['Pclass'].value_counts().plot(kind="bar") plt.ylabel(u"人數(shù)") plt.title(u"乘客等級(jí)分布")# 第三張小圖 plt.subplot2grid((2,3),(0,2)) plt.scatter(data_train['Survived'], data_train['Age']) plt.ylabel(u"年齡") plt.grid(b=True, which='major', axis='y') plt.title(u"按年齡看獲救分布 (1為獲救)")# 第四張小圖,分布圖 plt.subplot2grid((2,3),(1,0), colspan=2) data_train.Age[data_train.Pclass == 1].plot(kind='kde') data_train.Age[data_train.Pclass == 2].plot(kind='kde') data_train.Age[data_train.Pclass == 3].plot(kind='kde') plt.xlabel(u"年齡") plt.ylabel(u"密度") plt.title(u"各等級(jí)的乘客年齡分布") plt.legend((u'頭等艙', u'2等艙',u'3等艙'),loc='best')# 第五張小圖 plt.subplot2grid((2,3),(1,2)) data_train.Embarked.value_counts().plot(kind='bar') plt.title(u"各登船口岸上船人數(shù)") plt.ylabel(u"人數(shù)") plt.show()我們從上面的可視化操作結(jié)果可以看出,其實(shí)可以看出一些規(guī)律,比如說(shuō)生還的幾率比死亡的要大,然后獲救的人在年齡上區(qū)別不大,然后就是有錢人(坐頭等艙的)的年齡會(huì)偏大等。
Tip15:如何使用sklearn的多項(xiàng)式來(lái)衍生更多的變量?
關(guān)于這種衍生變量的方式,理論其實(shí)大家應(yīng)該很早也都聽說(shuō)過(guò)了,但是如何在Python里實(shí)現(xiàn),也就是今天在這里分享給大家,其實(shí)也很簡(jiǎn)單,就是調(diào)用sklearn的PolynomialFeatures方法,具體大家可以看看下面的demo。
這里使用一個(gè)人體加速度數(shù)據(jù)集,也就是記錄一個(gè)人在做不同動(dòng)作時(shí)候,在不同方向上的加速度,分別有3個(gè)方向,命名為x、y、z。
關(guān)鍵代碼
# 擴(kuò)展數(shù)值特征 from sklearn.preprocessing import PolynomialFeaturesx = df[['x','y','z']] y = df['activity']poly = PolynomialFeatures(degree=2, include_bias=False, interaction_only=False)x_poly = poly.fit_transform(x) pd.DataFrame(x_poly, columns=poly.get_feature_names()).head()就這樣子簡(jiǎn)單的去調(diào)用,就可以生成了很多的新變量了。
Tip17:如何把分布修正為類正態(tài)分布?
今天我們用的是一個(gè)新的數(shù)據(jù)集,也是在kaggle上的一個(gè)比賽,大家可以先去下載一下:
下載地址:
https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data
import pandas as pd import numpy as np # Plots import seaborn as sns import matplotlib.pyplot as plt# 讀取數(shù)據(jù)集 train = pd.read_csv('./data/house-prices-advanced-regression-techniques/train.csv') train.head()首先這個(gè)是一個(gè)價(jià)格預(yù)測(cè)的題目,在開始前我們需要看看分布情況,可以調(diào)用以下的方法來(lái)進(jìn)行繪制:
sns.set_style("white") sns.set_color_codes(palette='deep') f, ax = plt.subplots(figsize=(8, 7)) #Check the new distribution sns.distplot(train['SalePrice'], color="b"); ax.xaxis.grid(False) ax.set(ylabel="Frequency") ax.set(xlabel="SalePrice") ax.set(title="SalePrice distribution") sns.despine(trim=True, left=True) plt.show()我們從結(jié)果可以看出,銷售價(jià)格是右偏,而大多數(shù)機(jī)器學(xué)習(xí)模型都不能很好地處理非正態(tài)分布數(shù)據(jù),所以我們可以應(yīng)用log(1+x)轉(zhuǎn)換來(lái)進(jìn)行修正。那么具體我們可以怎么用Python代碼實(shí)現(xiàn)呢?
# log(1+x) 轉(zhuǎn)換 train["SalePrice_log"] = np.log1p(train["SalePrice"])sns.set_style("white") sns.set_color_codes(palette='deep') f, ax = plt.subplots(figsize=(8, 7))sns.distplot(train['SalePrice_log'] , fit=norm, color="b");# 得到正態(tài)分布的參數(shù) (mu, sigma) = norm.fit(train['SalePrice_log'])plt.legend(['Normal dist. ($\mu=$ {:.2f} and $\sigma=$ {:.2f} )'.format(mu, sigma)],loc='best') ax.xaxis.grid(False) ax.set(ylabel="Frequency") ax.set(xlabel="SalePrice") ax.set(title="SalePrice distribution") sns.despine(trim=True, left=True)plt.show()目前這個(gè)項(xiàng)目更新到了19節(jié),但是會(huì)持續(xù)不斷更新“錦囊”,歡迎大家來(lái)進(jìn)行star哦!
項(xiàng)目地址為:
https://github.com/Pysamlam/Tips-of-Feature-engineering
備注:公眾號(hào)菜單包含了整理了一本AI小抄,非常適合在通勤路上用學(xué)習(xí)。
往期精彩回顧適合初學(xué)者入門人工智能的路線及資料下載機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)在線手冊(cè)AI基礎(chǔ)下載(第一部分)備注:加入本站微信群或者qq群,請(qǐng)回復(fù)“加群”獲取一折本站知識(shí)星球優(yōu)惠券,請(qǐng)回復(fù)“知識(shí)星球”喜歡文章,點(diǎn)個(gè)在看
總結(jié)
以上是生活随笔為你收集整理的强烈推荐!分享一个持续连载的《特征工程小锦囊》项目,代码已开源!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 数据分析的必备材料:学完可以解决90%以
- 下一篇: Github标星24.9k!适合初学者的