閱讀499 返回首頁    go Python


代碼實現!教學視頻!Python學習者最易上手的機器學習漫遊指南

大數據文摘作品,轉載要求見文末

作者 | Conor Dewey

編譯 |糖竹子,徐淩霄,Aileen

導讀:半路出山想迅速上手Python做機器學習?這篇文章就是你需要的實用指南。

毋庸置疑,近來機器學習人氣日益高漲,逐漸在流行詞榜單上占據一席之地。機器學習算法繁多,到底該選擇哪一種處理相關數據是困擾很多學習者的問題。本文將以一種清晰簡明的方式,解釋並實踐最常見的幾種機器學習算法。

接下來,我們將羅列8種最常見火爆的機器學習算法,通過Python,將它們分別適用同一個經典數據集Iris(線性回歸和邏輯回歸除外),進而分辨出不同算法在預測準確率、模型建立過程、對數據集的使用方式等方向的異同。每一種算法後都將附上Python實現代碼和演示視頻。

8大算法

本文中將覆蓋共8種不同的機器學習算法(後續會有更多)。閱讀時本指南時,你可以自由的隨意翻翻或跳過任何一個已經熟悉的算法。請根據著個人需求使用這份指南。閑話少說,本文將分為以下及部分。

1.線性回歸

2.邏輯回歸

3.決策樹

4.支持向量機

5.KNN 臨近算法

6.隨機森林

7. K-Means聚類

8.主成分分析

若嚐試使用他人的代碼時,結果你發現需要三個新的模塊包而且本代碼是用舊版本的語言寫出的,這將讓人感到無比沮喪。為了大家更加方便,我將使用Python3.5.2並會在下方列出了我在做這些練習前加載的模塊包。我也從UCI機器學習庫中下載了Diabetes和Iris數據集作為樣本數據。

如果你希望跳過這些內容,僅想看看全部代碼,你可以直接前往Github上查看(https://github.com/conordewey3/HitchHikers-Guide-Machine-Learning)。

線性回歸

講解

線性回歸應該是機器學習原理中最流行也是最不受重視的算法了。在比較模型表現時,許多數據科學家總是會忽略這一事實,即比起複雜更應該選擇簡單的方法。

總之,線性回歸是一種基於連續型變量進行預測的有監督學習算法。線性回歸適用範圍廣泛,它既能對單一變量做回歸(簡單線性回歸)也可以對多維特征做回歸(多元線性回歸)。他的工作原理是,對變量分配最佳權重以產生的一條直線(ax+b)用於預測結果。請查看以下視頻了解更多詳盡內容。

現在你應該已經掌握了線性回歸的概念,接下來讓我們看看怎樣在Python中實現它。

準備工作

from sklearn import linear_model

df = pd.read_csv(‘linear_regression_df.csv’)

df.columns = [‘X’, ‘Y’]

df.head()

可視化

sns.set_context(“notebook”, font_scale=1.1)

sns.set_style(“ticks”)

sns.lmplot(‘X’,’Y’, data=df)

plt.ylabel(‘Response’)

plt.xlabel(‘Explanatory’)

實現

linear = linear_model.LinearRegression()

trainX = np.asarray(df.X[20:len(df.X)]).reshape(-1, 1)

trainY = np.asarray(df.Y[20:len(df.Y)]).reshape(-1, 1)

testX = np.asarray(df.X[:20]).reshape(-1, 1)

testY = np.asarray(df.Y[:20]).reshape(-1, 1)

linear.fit(trainX, trainY)

linear.score(trainX, trainY)

print(‘Coefficient: \n’, linear.coef_)

print(‘Intercept: \n’, linear.intercept_)

print(‘R² Value: \n’, linear.score(trainX, trainY))

predicted = linear.predict(testX)

邏輯回歸

講解

邏輯回歸是有監督分類算法的一種,對預測離散變量非常有效。一種典型的用法是用邏輯回歸方程預測事件在0到1之間發生的概率。

當我第一次學習邏輯回歸時,以為是這隻是一個小眾工具,並沒有引起十分的注意。後來我才發現,這種想法真是大錯特錯。邏輯回歸的一些潛在概念在機器學習其他算法例如神經網絡中也有用到。請大家牢記這一點,然後查看下麵的視頻了解更多內容。

現在你已經掌握了邏輯回歸的一些概念,讓我們在Python中加以實現。

準備工作

from sklearn.linear_model import LogisticRegression

df = pd.read_csv(‘logistic_regression_df.csv’)

df.columns = [‘X’, ‘Y’]

df.head()

可視化

sns.set_context(“notebook”, font_scale=1.1)

sns.set_style(“ticks”)

sns.regplot(‘X’,’Y’, data=df, logistic=True)

plt.ylabel(‘Probability’)

plt.xlabel(‘Explanatory’)

實現

logistic = LogisticRegression()

X = (np.asarray(df.X)).reshape(-1, 1)

Y = (np.asarray(df.Y)).ravel()

logistic.fit(X, Y)

logistic.score(X, Y)

print(‘Coefficient: \n’, logistic.coef_)

print(‘Intercept: \n’, logistic.intercept_)

print(‘R² Value: \n’, logistic.score(X, Y))

決策樹

講解

決策樹也是有監督學習的一種,即可用於分類也可用於回歸。在我的經驗裏,他們主要用於分類。模型先接受輸入的一種情況,然後沿著樹枝向下走,依據設計的條件檢測重要變量。根據結果,選擇繼續往左邊的子枝走還是往右邊的子枝走,如此重複。一般整個過程中,最重要的特征會更靠近樹的根部。

決策樹正變得越來越受歡迎,而且任何項目的數據科學家都能用它作為一種強分類算法,尤其與隨機是森林,Boosting 算法和Bagging 算法一起使用時。再一次,使用下方的視頻更深入了解決策樹的基礎功能。

現在你知道決策樹以及它怎樣運作了,讓我們去Python中實踐一下。

準備工作

from sklearn import tree

df = pd.read_csv(‘iris_df.csv’)

df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]

df.head()

實現

from sklearn.cross_validation import train_test_split

decision = tree.DecisionTreeClassifier(criterion=’gini’)

X = df.values[:, 0:4]

Y = df.values[:, 4]

trainX, testX, trainY, testY = train_test_split( X, Y, test_size = 0.3)

decision.fit(trainX, trainY)

print(‘Accuracy: \n’, decision.score(testX, testY))

可視化

from IPython.display import Image

import pydotplus as pydot

dot_data = StringIO()

tree.export_graphviz(decision, out_file=dot_data)

graph = pydot.graph_from_dot_data(dot_data.getvalue())

Image(graph.create_png())

支持向量機

講解

支持向量機,又稱SVM,是一種通過在不同類別的數據間生成一條分界線實現分類的知名的有監督分類算法。簡單來說,通過計算最優分割平麵,使得屬於兩個不同類的數據點間隔最大,從而得到分類向量。

分類向量一般被默認或被視為線性,然而不一定非要這樣。如果核函數不是默認的高斯函數或線性函數,分類向量也可以是非線性的形式。關於SVM還有很多可以介紹,請繼續觀看指導視頻。(後台回複 “代碼”2字獲取相關資源。)

現在你已經了解支持向量機了,讓我們在Python中一起實踐一下。

準備工作

from sklearn import svm

df = pd.read_csv(‘iris_df.csv’)

df.columns = [‘X4’, ‘X3’, ‘X1’, ‘X2’, ‘Y’]

df = df.drop([‘X4’, ‘X3’], 1)

df.head()

實現

from sklearn.cross_validation import train_test_split

support = svm.SVC()

X = df.values[:, 0:2]

Y = df.values[:, 2]

trainX, testX, trainY, testY = train_test_split( X, Y, test_size = 0.3)

support.fit(trainX, trainY)

print(‘Accuracy: \n’, support.score(testX, testY))

pred = support.predict(testX)

可視化

sns.set_context(“notebook”, font_scale=1.1)

sns.set_style(“ticks”)

sns.lmplot(‘X1’,’X2 , scatter=True, fit_reg=False, data=df, hue=’Y’)

plt.ylabel(‘X2’)

plt.xlabel(‘X1’)

KNN鄰近算法

講解

K最鄰近分類算法,或縮寫為KNN,是一種有監督學習算法,專門用於分類。算法先關注不同類的中心,對比樣本和類中心的距離(通常用歐幾裏得距離方程)。如果一個樣本中的大多數屬於某一個類別,則該樣本都歸屬於這個類別。

你已經了解了KNN算法的內在概念,讓我們在Python中實踐一下。

準備工作

from sklearn.neighbors import KNeighborsClassifier

df = pd.read_csv(‘iris_df.csv’)

df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]

df = df.drop([‘X4’, ‘X3’], 1)

df.head()

可視化

sns.set_context(“notebook”, font_scale=1.1)

sns.set_style(“ticks”)

sns.lmplot(‘X1’,’X2 , scatter=True, fit_reg=False, data=df, hue=’Y’)

plt.ylabel(‘X2’)

plt.xlabel(‘X1’)

實現

from sklearn.cross_validation import train_test_split

neighbors = KNeighborsClassifier(n_neighbors=5)

X = df.values[:, 0:2]

Y = df.values[:, 2]

trainX, testX, trainY, testY = train_test_split( X, Y, test_size = 0.3)

neighbors.fit(trainX, trainY)

print(‘Accuracy: \n’, neighbors.score(testX, testY))

pred = neighbors.predict(testX)

隨機森林

講解

隨機森林是一種流行的有監督集成學習算法。集成的意思是把許多”弱學習器”結合在一起,形成一個強預測器。在本例中,每一個隨機生成的決策樹都是一個弱學習器,放在一起成為了一個強預測器—隨機森林。後台獲取相關視頻,介紹更多隨機森林背後的原理。

知道了隨機森林的運作原理,到了在Python中實踐的時間了。

準備工作

from sklearn.ensemble import RandomForestClassifier

df = pd.read_csv(‘iris_df.csv’)

df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]

df.head()

實現

from sklearn.cross_validation import train_test_split

forest = RandomForestClassifier()

X = df.values[:, 0:4]

Y = df.values[:, 4]

trainX, testX, trainY, testY = train_test_split( X, Y, test_size = 0.3)

forest.fit(trainX, trainY)

print(‘Accuracy: \n’, forest.score(testX, testY))

pred = forest.predict(testX)

K-Means 聚類算法

講解

K-Means算法是一種流行的無監督學習分類算法,主要用於解決聚類問題。K 是用戶預輸入的分類數量。算法先隨機選擇K個點,然後用距離算法將剩下的對象分組,最終達到最優聚類。模型的好壞主要取決於數據科學家對K值的設定。按照慣例,後台獲取相關視頻了解更多內容。

現在我們已經對K-Means聚類了解更多,也明白它的原理了。讓我們在Python中實現一下它的算法。

準備工作

from sklearn.cluster import KMeans

df = pd.read_csv(‘iris_df.csv’)

df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]

df = df.drop([‘X4’, ‘X3’], 1)

df.head()

實現

from sklearn.cross_validation import train_test_split

kmeans = KMeans(n_clusters=3)

X = df.values[:, 0:2]

kmeans.fit(X)

df[‘Pred’] = kmeans.predict(X)

df.head()

可視化

sns.set_context(“notebook”, font_scale=1.1)

sns.set_style(“ticks”)

sns.lmplot(‘X1’,’X2 , scatter=True, fit_reg=False, data=df, hue = ‘Pred’)

PCA主成分分析

講解

主成分分析(PCA)是一種降維算法,可以為數據科學家做很多事。最主要的是,當模型有成百上千個不同特征需要處理時,主成分分析能極大地減少模型計算量。這是一種無監督模型,但使用者依然需要分析降維後的結果,確保其能保持原數據集95%左右的信息。關於主成分分析還有很多內容可以說,所以請一定觀看以下視頻。(視頻資源,回複 “代碼”2字獲取相關資源。)

現在我們了解了更多主成分分析和它的原理,讓我們在Python中實踐一下。

準備工作

from sklearn import decomposition

df = pd.read_csv(‘iris_df.csv’)

df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]

df.head()

實現

from sklearn import decomposition

pca = decomposition.PCA()

fa = decomposition.FactorAnalysis()

X = df.values[:, 0:4]

Y = df.values[:, 4]

train, test = train_test_split(X,test_size = 0.3)

train_reduced = pca.fit_transform(train)

test_reduced = pca.transform(test)

pca.n_components_

這份輔導指南僅簡單介紹了當下流行的機器學習算法的皮毛, 希望它能在你們成為機器學習大師的旅程上有所幫助。

優惠倒計時!

早鳥4.6折優惠僅剩3天!

教師3.7折優惠僅剩5天!

深度學習係列課程

大咖講師直播

+

助教輔導答疑

+

雲實驗室足量GPU

充實高效的學習新體驗!

詳情見海報

誌願者介紹

回複“誌願者”加入我們

最後更新:2017-10-08 19:58:54

  上一篇:go 如何在kafka-python和confluent-kafka之間做出選擇?
  下一篇:go python視頻教程哪裏有?python視頻教程下載