實(shí)用機(jī)器學(xué)習(xí)模板 pipeline - 5 分鐘快速搭建模型

如果想要快速的搭建機(jī)器學(xué)習(xí)的模型乳愉,scikit - learn 是最好的工具之一燕刻,他提供的 packages 能夠快速幫助我們使用 Python 搭建起一個(gè)機(jī)器學(xué)習(xí)模型,在這里我們就用一個(gè) cheatsheet 來快速展示一個(gè)用機(jī)器學(xué)習(xí) Pipeline畴蹭。

一個(gè)基礎(chǔ)的 機(jī)器學(xué)習(xí)Pipeline 主要包含了下述 5 個(gè)步驟:

- 數(shù)據(jù)讀取

- 數(shù)據(jù)預(yù)處理

- 創(chuàng)建模型

- 評(píng)估模型結(jié)果

- 模型調(diào)參

那我們接下去就根據(jù) Pipeline 里面的 5 個(gè)步驟最筒,來分別結(jié)合 scikit-learn 進(jìn)行說明。

1. 數(shù)據(jù)讀取湿颅,拆分訓(xùn)練集载绿、測(cè)試集

數(shù)據(jù)讀取之后,通秤秃剑可以存儲(chǔ)在 NumPy 數(shù)組或 SciPy 矩陣或者 Pandas DataFrame 中崭庸。我們一般推薦 Pandas 的處理方法,其后也會(huì)介紹 Pandas 庫(kù)中的缺失值處理。

- NumPy

>>> import numpy as np

>>> X = np.random.random((10,5))

>>> y = np.array(['M','M','F','F','M','F','M','M','F','F','F'])

>>> X[X < 0.7] = 0

- Pandas

>>> import pandas as pd

>>> data = pd.read_csv('data.csv')?

>>> X = data[['a',''b]]

>>> y = data['c']

加載數(shù)據(jù)后怕享,您的下一個(gè)任務(wù)就是將數(shù)據(jù)集:

- 拆分訓(xùn)練數(shù)據(jù)和測(cè)試數(shù)據(jù)

當(dāng)然你也可能聽說過訓(xùn)練集执赡、驗(yàn)證集、測(cè)試集函筋,他們的關(guān)系是訓(xùn)練集(可在訓(xùn)練時(shí)拆分成訓(xùn)練集沙合、驗(yàn)證集)、測(cè)試集跌帐。所以在此處單獨(dú)劃分出測(cè)試集首懈,沒有任何的問題。

>>> from sklearn.model_selection import train_test_split

>>> X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0)

注解一下 random_state含末,這是計(jì)算機(jī)內(nèi)部的一個(gè)隨機(jī)函數(shù)猜拾,通過這個(gè)參數(shù)設(shè)置可以確保每次拆分的測(cè)試集是一樣的,方便在后續(xù)測(cè)試不同模型性能時(shí)進(jìn)行控制變量佣盒。

2. 數(shù)據(jù)預(yù)處理

- 數(shù)據(jù)標(biāo)準(zhǔn)化

數(shù)據(jù)標(biāo)準(zhǔn)化是數(shù)據(jù)預(yù)處理步驟之一挎袜,用于重新調(diào)整一個(gè)或多個(gè)屬性,使屬性的平均值為0肥惭,標(biāo)準(zhǔn)差為1盯仪。標(biāo)準(zhǔn)化會(huì)讓數(shù)據(jù)符合高斯(鐘形曲線)分布。

>>> from sklearn.preprocessing import StandardScaler

>>> scaler = StandardScaler().fit(X_train)

>>> standardized_X = scaler.transform(X_train)

>>> standardized_X_test = scaler.transform(X_test)

- 歸一化

歸一化是一種通常用于機(jī)器學(xué)習(xí)的數(shù)據(jù)預(yù)處理方法蜜葱。歸一化的主要目標(biāo)是更改數(shù)據(jù)集中數(shù)字列的值全景,以便數(shù)據(jù)可以具有相同的比例。

>>> from sklearn.preprocessing import Normalizer

>>> scaler = Normalizer().fit(X_train)

>>> normalized_X = scaler.transform(X_train)

>>> normalized_X_test = scaler.transform(X_test)

- 二值化

二值化是對(duì)文本計(jì)數(shù)數(shù)據(jù)執(zhí)行的常見操作牵囤。使用二值化爸黄,我們可以用該指來分析特征的存在與否,而不是例如具有量化的出現(xiàn)次數(shù)揭鳞。

>>> from sklearn.preprocessing import Binarizer

>>> binarizer = Binarizer(threshold=0.0).fit(X)

>>> binary_X = binarizer.transform(X)

- 編碼

LabelEncoder是用于編碼類級(jí)別的數(shù)據(jù)預(yù)處理的另一個(gè)類型炕贵,它還可用于將非數(shù)字標(biāo)簽轉(zhuǎn)換為數(shù)字標(biāo)簽。

>>> from sklearn.preprocessing import LabelEncoder

>>> enc = LabelEncoder()

>>> y = enc.fit_transform(y)

- 填充缺失值

python 中的 Imputer 類可以用于填充缺失值野崇。它通過使用缺失值所在的行或列的平均值称开,中值或最常值來實(shí)現(xiàn)此目的。此類還允許編碼不同的缺失值乓梨。

缺失值的去除和補(bǔ)充十分的重要鳖轰,因?yàn)?機(jī)器學(xué)習(xí)的大部分模型是不能處理缺損值的。

>>> from sklearn.preprocessing import Imputer

>>> imp = Imputer(missing_values=0, strategy='mean', axis=0)

>>> imp.fit_transform(X_train)

-- 去掉缺失值

這里主要是針對(duì) Pandas 讀入方法的數(shù)據(jù)來進(jìn)行缺失值的處理扶镀。

>>> import pandas as pd

>>> data = pd.read_csv("data.csv")

>>> data.dropna()

- 生成多項(xiàng)式特征

多項(xiàng)式特征生成一個(gè)新的特征矩陣蕴侣,該特征矩陣由度數(shù)小于或等于指定度數(shù)的特征的所有多項(xiàng)式組合組成。該處理是為了增加更多的數(shù)據(jù)特征狈惫。例如睛蛛,如果輸入樣本是二維的并且形式為[a鹦马,b]胧谈,那么2次多項(xiàng)式特征是[1忆肾,a,b菱肖,a ^ 2客冈,ab,b ^ 2]稳强。

>>> from sklearn.preprocessing import PolynomialFeatures

>>> poly = PolynomialFeatures(5)

>>> poly.fit_transform(X)

3. 創(chuàng)建模型

- 監(jiān)督學(xué)習(xí)

監(jiān)督學(xué)習(xí)是一種機(jī)器學(xué)習(xí)场仲,使模型能夠在對(duì)標(biāo)記數(shù)據(jù)進(jìn)行培訓(xùn)后預(yù)測(cè)未來結(jié)果。在這里你會(huì)發(fā)現(xiàn)退疫,真實(shí)的模型創(chuàng)建只需要一句代碼渠缕。

# Linear Regression Algorithm

>>> from sklearn.linear_model import LinearRegression

>>> lr = LinearRegression(normalize=True)

# Naive Bayes Algorithm

>>> from sklearn.naive_bayes import GaussianNB

>>> gnb = GaussianNB()

# KNN Algorithm

>>> from sklearn import neighbors

>>> knn = neighbors.KNeighborsClassifier(n_neighbors=5)

# Support Vector Machines (SVM)

>>> from sklearn.svm import SVC

>>> svc = SVC(kernel='linear’)


- 無監(jiān)督學(xué)習(xí)

無監(jiān)督學(xué)習(xí)可以使模型能夠預(yù)測(cè)未來結(jié)果,而無需對(duì)標(biāo)記數(shù)據(jù)進(jìn)行訓(xùn)練褒繁,通常用于特征的提取亦鳞。

# Principal Component Analysis (PCA)

>>> from sklearn.decomposition import PCA

>>> pca = PCA(n_components=0.95)

# K Means Clustering Algorithm

>>> from sklearn.cluster import KMeans

>>> k_means = KMeans(n_clusters=3, random_state=0)

- 模型數(shù)據(jù)擬合

我個(gè)人更愿意稱這一步為模型數(shù)據(jù)裝載,但是在 scikit-learn 里面棒坏,這一步是擬合燕差,也是用于衡量機(jī)器學(xué)習(xí)模型對(duì)類似數(shù)據(jù)的概括程度與其訓(xùn)練結(jié)果的衡量標(biāo)準(zhǔn)。

# For Supervised learning

>>> lr.fit(X, y)

>>> knn.fit(X_train, y_train)

>>> svc.fit(X_train, y_train)

# For Unsupervised Learning

>>> k_means.fit(X_train)#Fits data into the model

>>> pca_model = pca.fit_transform(X_train)

- 預(yù)測(cè)

預(yù)測(cè)用來得到訓(xùn)練的結(jié)果坝冕,我們需要喂入test模型中的特征值徒探。

# For Supervised learning

>>> y_pred=svc.predict(np.random((2,5)))#svc model

>>> y_pred=lr.predict(x_test)#lr model

>>> y_pred=knn.predict_proba(x_test)#knn model

# For Unsupervised Learning

>>> y_pred=k_means.predict(x_test)#predict labels in clustering algorithm

4. 估算模型效果

- 分類指標(biāo)評(píng)價(jià)

sklearn.metrics模塊實(shí)現(xiàn)了多個(gè)損失,分?jǐn)?shù)和效用函數(shù)來衡量分類性能喂窟。

# Mean Absolute Error

>>> from sklearn.metrics import mean_absolute_error

>>> y_true = [3, -0.5, 2]

>>> mean_absolute_error(y_true, y_pred)

# Mean Squared Error

>>> from sklearn.metrics import mean_squared_error

>>> mean_squared_error(y_test, y_pred)

# R2 Score

>>> from sklearn.metrics import r2_score

>>> r2_score(y_true, y_pred)

- 回歸指標(biāo)

sklearn.metrics模塊實(shí)現(xiàn)了幾個(gè)損失测暗,分?jǐn)?shù)和效用函數(shù)來衡量回歸性能。

# Accuracy Score

>>> knn.score(X_test, y_test)

>>> from sklearn.metrics import accuracy_score

>>> accuracy_score(y_test, y_pred)

# Classification Report

>>> from sklearn.metrics import classification_report

>>> print(classification_report(y_test, y_pred))

# Confusion Matrix

>>> from sklearn.metrics import confusion_matrix

>>> print(confusion_matrix(y_test, y_pred))

- 聚類評(píng)估指標(biāo)

# Adjusted Rand Index

>>> from sklearn.metrics import adjusted_rand_score

>>> adjusted_rand_score(y_true, y_pred)

#?Homogeneity

>>> from sklearn.metrics import homogeneity_score

>>> homogeneity_score(y_true, y_pred)

# V-measure

>>> from sklearn.metrics import v_measure_score

>>> metrics.v_measure_score(y_true, y_pred)

- 交叉驗(yàn)證

>>> from sklearn.cross_validation import cross_val_score

>>> print(cross_val_score(knn, X_train, y_train, cv=4))

>>> print(cross_val_score(lr, X, y, cv=2))

5. 模型調(diào)參

- 網(wǎng)格搜索

GridSearchCV 實(shí)現(xiàn)了“fit”和“score”方法磨澡,它還可以實(shí)現(xiàn)“predict”碗啄, “predict_proba”, “decision_function”钱贯, “transform”和“inverse_transform”挫掏。

>>> from sklearn.grid_search import GridSearchCV

>>> params = {"n_neighbors": np.arange(1,3), "metric": ["euclidean", "cityblock"]}

>>> grid = GridSearchCV(estimator=knn,?param_grid=params)

>>> grid.fit(X_train, y_train)

>>> print(grid.best_score_)

>>> print(grid.best_estimator_.n_neighbors)

- 隨機(jī)網(wǎng)格搜索

RandomizedSearchCV對(duì)超參數(shù)執(zhí)行隨機(jī)搜索。與GridSearchCV相比秩命,并未嘗試所有參數(shù)值尉共,而是從指定的分布中采樣固定數(shù)量的參數(shù)設(shè)置。嘗試的參數(shù)設(shè)置數(shù)由n_iter給出弃锐。

>>> from sklearn.grid_search import RandomizedSearchCV

>>> params = {"n_neighbours": range(1,5), "weights":["uniform", "distance"]}

>>>rserach = RandomizedSearchCV(estimator=knn,param_distribution=params, cv=4, n_iter=8, random_state=5)

>>> rsearch.fit(X_train, Y_train)

>>> print(rsearch.best_score)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末袄友,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子霹菊,更是在濱河造成了極大的恐慌剧蚣,老刑警劉巖支竹,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異鸠按,居然都是意外死亡礼搁,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門目尖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來馒吴,“玉大人,你說我怎么就攤上這事瑟曲∫粒” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵洞拨,是天一觀的道長(zhǎng)扯罐。 經(jīng)常有香客問我,道長(zhǎng)烦衣,這世上最難降的妖魔是什么歹河? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮琉挖,結(jié)果婚禮上启泣,老公的妹妹穿的比我還像新娘。我一直安慰自己示辈,他們只是感情好寥茫,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著矾麻,像睡著了一般纱耻。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上险耀,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天弄喘,我揣著相機(jī)與錄音,去河邊找鬼甩牺。 笑死蘑志,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贬派。 我是一名探鬼主播急但,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼搞乏!你這毒婦竟也來了波桩?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤请敦,失蹤者是張志新(化名)和其女友劉穎镐躲,沒想到半個(gè)月后储玫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萤皂,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年撒穷,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敌蚜。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡桥滨,死狀恐怖窝爪,靈堂內(nèi)的尸體忽然破棺而出弛车,到底是詐尸還是另有隱情,我是刑警寧澤蒲每,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布纷跛,位于F島的核電站,受9級(jí)特大地震影響邀杏,放射性物質(zhì)發(fā)生泄漏贫奠。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一望蜡、第九天 我趴在偏房一處隱蔽的房頂上張望唤崭。 院中可真熱鬧,春花似錦脖律、人聲如沸谢肾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽芦疏。三九已至,卻和暖如春微姊,著一層夾襖步出監(jiān)牢的瞬間酸茴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國(guó)打工兢交, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留薪捍,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓配喳,卻偏偏與公主長(zhǎng)得像酪穿,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子界逛,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345