大數(shù)據(jù)文摘作品,轉(zhuǎn)載要求見文末
作者 | Conor Dewey
編譯 | 糖竹子,徐凌霄,Aileen
導讀:半路出山想迅速上手Python做機器學習?這篇文章就是你需要的實用指南。
毋庸置疑,近來機器學習人氣日益高漲,逐漸在流行詞榜單上占據(jù)一席之地。機器學習算法繁多,到底該選擇哪一種處理相關數(shù)據(jù)是困擾很多學習者的問題。本文將以一種清晰簡明的方式,解釋并實踐最常見的幾種機器學習算法。
接下來,我們將羅列8種最常見火爆的機器學習算法,通過Python,將它們分別適用同一個經(jīng)典數(shù)據(jù)集Iris(線性回歸和邏輯回歸除外),進而分辨出不同算法在預測準確率、模型建立過程、對數(shù)據(jù)集的使用方式等方向的異同。每一種算法后都將附上Python實現(xiàn)代碼和演示視頻。
8大算法
本文中將覆蓋共8種不同的機器學習算法(后續(xù)會有更多)。閱讀時本指南時,你可以自由的隨意翻翻或跳過任何一個已經(jīng)熟悉的算法。請根據(jù)著個人需求使用這份指南。閑話少說,本文將分為以下及部分。
1.線性回歸
2.邏輯回歸
3.決策樹
4.支持向量機
5.KNN 臨近算法
6.隨機森林
7. K-Means聚類
8.主成分分析
若嘗試使用他人的代碼時,結(jié)果你發(fā)現(xiàn)需要三個新的模塊包而且本代碼是用舊版本的語言寫出的,這將讓人感到無比沮喪。為了大家更加方便,我將使用Python3.5.2并會在下方列出了我在做這些練習前加載的模塊包。我也從UCI機器學習庫中下載了Diabetes和Iris數(shù)據(jù)集作為樣本數(shù)據(jù)。
如果你希望跳過這些內(nèi)容,僅想看看全部代碼,你可以直接前往Github上查看(https://github.com/conordewey3/HitchHikers-Guide-Machine-Learning)。
線性回歸
講解
線性回歸應該是機器學習原理中最流行也是最不受重視的算法了。在比較模型表現(xiàn)時,許多數(shù)據(jù)科學家總是會忽略這一事實,即比起復雜更應該選擇簡單的方法。
總之,線性回歸是一種基于連續(xù)型變量進行預測的有監(jiān)督學習算法。線性回歸適用范圍廣泛,它既能對單一變量做回歸(簡單線性回歸)也可以對多維特征做回歸(多元線性回歸)。他的工作原理是,對變量分配最佳權重以產(chǎn)生的一條直線(ax+b)用于預測結(jié)果。請查看以下視頻了解更多詳盡內(nèi)容。
現(xiàn)在你應該已經(jīng)掌握了線性回歸的概念,接下來讓我們看看怎樣在Python中實現(xiàn)它。
準備工作
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’)
實現(xiàn)
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(‘R2 Value: \n’, linear.score(trainX, trainY))
predicted = linear.predict(testX)
邏輯回歸
講解
邏輯回歸是有監(jiān)督分類算法的一種,對預測離散變量非常有效。一種典型的用法是用邏輯回歸方程預測事件在0到1之間發(fā)生的概率。
當我第一次學習邏輯回歸時,以為是這只是一個小眾工具,并沒有引起十分的注意。后來我才發(fā)現(xiàn),這種想法真是大錯特錯。邏輯回歸的一些潛在概念在機器學習其他算法例如神經(jīng)網(wǎng)絡中也有用到。請大家牢記這一點,然后查看下面的視頻了解更多內(nèi)容。
現(xiàn)在你已經(jīng)掌握了邏輯回歸的一些概念,讓我們在Python中加以實現(xiàn)。
準備工作
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’)
實現(xiàn)
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(‘R2 Value: \n’, logistic.score(X, Y))
決策樹
講解
決策樹也是有監(jiān)督學習的一種,即可用于分類也可用于回歸。在我的經(jīng)驗里,他們主要用于分類。模型先接受輸入的一種情況,然后沿著樹枝向下走,依據(jù)設計的條件檢測重要變量。根據(jù)結(jié)果,選擇繼續(xù)往左邊的子枝走還是往右邊的子枝走,如此重復。一般整個過程中,最重要的特征會更靠近樹的根部。
決策樹正變得越來越受歡迎,而且任何項目的數(shù)據(jù)科學家都能用它作為一種強分類算法,尤其與隨機是森林,Boosting 算法和Bagging 算法一起使用時。再一次,使用下方的視頻更深入了解決策樹的基礎功能。
現(xiàn)在你知道決策樹以及它怎樣運作了,讓我們?nèi)ython中實踐一下。
準備工作
from sklearn import tree
df = pd.read_csv(‘iris_df.csv’)
df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]
df.head()
實現(xiàn)
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 sklearn.externals.six import StringIO
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,是一種通過在不同類別的數(shù)據(jù)間生成一條分界線實現(xiàn)分類的知名的有監(jiān)督分類算法。簡單來說,通過計算最優(yōu)分割平面,使得屬于兩個不同類的數(shù)據(jù)點間隔最大,從而得到分類向量。
分類向量一般被默認或被視為線性,然而不一定非要這樣。如果核函數(shù)不是默認的高斯函數(shù)或線性函數(shù),分類向量也可以是非線性的形式。關于SVM還有很多可以介紹,請繼續(xù)觀看指導視頻。(后臺回復 “代碼”2字獲取相關資源。)
現(xiàn)在你已經(jīng)了解支持向量機了,讓我們在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()
實現(xiàn)
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,是一種有監(jiān)督學習算法,專門用于分類。算法先關注不同類的中心,對比樣本和類中心的距離(通常用歐幾里得距離方程)。如果一個樣本中的大多數(shù)屬于某一個類別,則該樣本都歸屬于這個類別。
你已經(jīng)了解了KNN算法的內(nèi)在概念,讓我們在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’)
實現(xiàn)
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)
隨機森林
講解
隨機森林是一種流行的有監(jiān)督集成學習算法。集成的意思是把許多”弱學習器”結(jié)合在一起,形成一個強預測器。在本例中,每一個隨機生成的決策樹都是一個弱學習器,放在一起成為了一個強預測器—隨機森林。后臺獲取相關視頻,介紹更多隨機森林背后的原理。
知道了隨機森林的運作原理,到了在Python中實踐的時間了。
準備工作
from sklearn.ensemble import RandomForestClassifier
df = pd.read_csv(‘iris_df.csv’)
df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]
df.head()
實現(xiàn)
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算法是一種流行的無監(jiān)督學習分類算法,主要用于解決聚類問題。K 是用戶預輸入的分類數(shù)量。算法先隨機選擇K個點,然后用距離算法將剩下的對象分組,最終達到最優(yōu)聚類。模型的好壞主要取決于數(shù)據(jù)科學家對K值的設定。按照慣例,后臺獲取相關視頻了解更多內(nèi)容。
現(xiàn)在我們已經(jīng)對K-Means聚類了解更多,也明白它的原理了。讓我們在Python中實現(xiàn)一下它的算法。
準備工作
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()
實現(xiàn)
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)是一種降維算法,可以為數(shù)據(jù)科學家做很多事。最主要的是,當模型有成百上千個不同特征需要處理時,主成分分析能極大地減少模型計算量。這是一種無監(jiān)督模型,但使用者依然需要分析降維后的結(jié)果,確保其能保持原數(shù)據(jù)集95%左右的信息。關于主成分分析還有很多內(nèi)容可以說,所以請一定觀看以下視頻。(視頻資源,回復 “代碼”2字獲取相關資源。)
現(xiàn)在我們了解了更多主成分分析和它的原理,讓我們在Python中實踐一下。
準備工作
from sklearn import decomposition
df = pd.read_csv(‘iris_df.csv’)
df.columns = [‘X1’, ‘X2’, ‘X3’, ‘X4’, ‘Y’]
df.head()
實現(xiàn)
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_
這份輔導指南僅簡單介紹了當下流行的機器學習算法的皮毛, 希望它能在你們成為機器學習大師的旅程上有所幫助。
聯(lián)系客服