Python機器學(xué)習(xí)10大經(jīng)典算法的講解和示例
為了展示10個經(jīng)典的機器學(xué)習(xí)算法的最簡例子,我將為每個算法編寫一個小的示例代碼。這些算法將包括線性回歸、邏輯回歸、K-最近鄰(KNN)、支持向量機(SVM)、決策樹、隨機森林、樸素貝葉斯、K-均值聚類、主成分分析(PCA)、和梯度提升(Gradient Boosting)。我將使用常見的機器學(xué)習(xí)庫,如 scikit-learn,numpy 和 pandas 來實現(xiàn)這些算法。
讓我們開始吧。
1. 線性回歸 (Linear Regression)
線性回歸通常用于根據(jù)連續(xù)變量估計實際數(shù)值(房價、呼叫次數(shù)、總銷售額等)。我們通過擬合最佳直線來建立自變量和因變量的關(guān)系。這條最佳直線叫做回歸線,并且用 Y= a *X + b 這條線性等式來表示。
理解線性回歸的最好辦法是回顧一下童年。假設(shè)在不問對方體重的情況下,讓一個五年級的孩子按體重從輕到重的順序?qū)Π嗌系耐瑢W(xué)排序,你覺得這個孩子會怎么做?他(她)很可能會目測人們的身高和體型,綜合這些可見的參數(shù)來排列他們。這是現(xiàn)實生活中使用線性回歸的例子。實際上,這個孩子發(fā)現(xiàn)了身高和體型與體重有一定的關(guān)系,這個關(guān)系看起來很像上面的等式。
import numpy as np
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt
# 生成示例數(shù)據(jù)
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([1, 2, 3, 4, 5])
# 創(chuàng)建線性回歸模型并擬合數(shù)據(jù)
model = LinearRegression()
model.fit(X, y)
# 預(yù)測
y_pred = model.predict(X)
# 繪制結(jié)果
plt.scatter(X, y, color='blue')
plt.plot(X, y_pred, color='red')
plt.title("Linear Regression Example")
plt.xlabel("X")
plt.ylabel("y")
plt.show()2. 邏輯回歸 (Logistic Regression)
別被它的名字迷惑了!這是一個分類算法而不是一個回歸算法。該算法可根據(jù)已知的一系列因變量估計離散數(shù)值(比方說二進制數(shù)值 0 或 1 ,是或否,真或假)。簡單來說,它通過將數(shù)據(jù)擬合進一個邏輯函數(shù)來預(yù)估一個事件出現(xiàn)的概率。因此,它也被叫做邏輯回歸。因為它預(yù)估的是概率,所以它的輸出值大小在 0 和 1 之間(正如所預(yù)計的一樣)。
import numpy as np
from sklearn.linear_model import LogisticRegression
# 生成示例數(shù)據(jù)
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([0, 0, 0, 1, 1])
# 創(chuàng)建邏輯回歸模型并擬合數(shù)據(jù)
model = LogisticRegression()
model.fit(X, y)
# 預(yù)測
y_pred = model.predict(X)
print("Predictions:", y_pred)3. K-最近鄰 (K-Nearest Neighbors, KNN)
該算法可用于分類問題和回歸問題。然而,在業(yè)界內(nèi),K – 最近鄰算法更常用于分類問題。K – 最近鄰算法是一個簡單的算法。它儲存所有的案例,通過周圍k個案例中的大多數(shù)情況劃分新的案例。根據(jù)一個距離函數(shù),新案例會被分配到它的 K 個近鄰中最普遍的類別中去。
這些距離函數(shù)可以是歐式距離、曼哈頓距離、明式距離或者是漢明距離。前三個距離函數(shù)用于連續(xù)函數(shù),第四個函數(shù)(漢明函數(shù))則被用于分類變量。如果 K=1,新案例就直接被分到離其最近的案例所屬的類別中。有時候,使用 KNN 建模時,選擇 K 的取值是一個挑戰(zhàn)。
import numpy as np
from sklearn.neighbors import KNeighborsClassifier
# 生成示例數(shù)據(jù)
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([0, 0, 0, 1, 1])
# 創(chuàng)建KNN模型并擬合數(shù)據(jù)
model = KNeighborsClassifier(n_neighbors=3)
model.fit(X, y)
# 預(yù)測
y_pred = model.predict(X)
print("Predictions:", y_pred)4. 支持向量機 (Support Vector Machine, SVM)
這是一種分類方法。在這個算法中,我們將每個數(shù)據(jù)在N維空間中用點標(biāo)出(N是你所有的特征總數(shù)),每個特征的值是一個坐標(biāo)的值。
import numpy as np
from sklearn.svm import SVC
# 生成示例數(shù)據(jù)
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([0, 0, 0, 1, 1])
# 創(chuàng)建SVM模型并擬合數(shù)據(jù)
model = SVC()
model.fit(X, y)
# 預(yù)測
y_pred = model.predict(X)
print("Predictions:", y_pred)5. 決策樹 (Decision Tree)
這是我最喜愛也是最頻繁使用的算法之一。這個監(jiān)督式學(xué)習(xí)算法通常被用于分類問題。令人驚奇的是,它同時適用于分類變量和連續(xù)因變量。在這個算法中,我們將總體分成兩個或更多的同類群。這是根據(jù)最重要的屬性或者自變量來分成盡可能不同的組別。
import numpy as np
from sklearn.tree import DecisionTreeClassifier
# 生成示例數(shù)據(jù)
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([0, 0, 0, 1, 1])
# 創(chuàng)建決策樹模型并擬合數(shù)據(jù)
model = DecisionTreeClassifier()
model.fit(X, y)
# 預(yù)測
y_pred = model.predict(X)
print("Predictions:", y_pred)6. 隨機森林 (Random Forest)
隨機森林是表示決策樹總體的一個專有名詞。在隨機森林算法中,我們有一系列的決策樹(因此又名“森林”)。為了根據(jù)一個新對象的屬性將其分類,每一個決策樹有一個分類,稱之為這個決策樹“投票”給該分類。這個森林選擇獲得森林里(在所有樹中)獲得票數(shù)最多的分類。
import numpy as np
from sklearn.ensemble import RandomForestClassifier
# 生成示例數(shù)據(jù)
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([0, 0, 0, 1, 1])
# 創(chuàng)建隨機森林模型并擬合數(shù)據(jù)
model = RandomForestClassifier(n_estimators=10)
model.fit(X, y)
# 預(yù)測
y_pred = model.predict(X)
print("Predictions:", y_pred)7. 樸素貝葉斯 (Naive Bayes)
在預(yù)示變量間相互獨立的前提下,根據(jù)貝葉斯定理可以得到樸素貝葉斯這個分類方法。用更簡單的話來說,一個樸素貝葉斯分類器假設(shè)一個分類的特性與該分類的其它特性不相關(guān)。舉個例子,如果一個水果又圓又紅,并且直徑大約是 3 英寸,那么這個水果可能會是蘋果。即便這些特性互相依賴,或者依賴于別的特性的存在,樸素貝葉斯分類器還是會假設(shè)這些特性分別獨立地暗示這個水果是個蘋果。
樸素貝葉斯模型易于建造,且對于大型數(shù)據(jù)集非常有用。雖然簡單,但是樸素貝葉斯的表現(xiàn)卻超越了非常復(fù)雜的分類方法。
import numpy as np
from sklearn.naive_bayes import GaussianNB
# 生成示例數(shù)據(jù)
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([0, 0, 0, 1, 1])
# 創(chuàng)建樸素貝葉斯模型并擬合數(shù)據(jù)
model = GaussianNB()
model.fit(X, y)
# 預(yù)測
y_pred = model.predict(X)
print("Predictions:", y_pred)8. K-均值聚類 (K-Means Clustering)
K – 均值算法是一種非監(jiān)督式學(xué)習(xí)算法,它能解決聚類問題。使用 K – 均值算法來將一個數(shù)據(jù)歸入一定數(shù)量的集群(假設(shè)有 k 個集群)的過程是簡單的。一個集群內(nèi)的數(shù)據(jù)點是均勻齊次的,并且異于別的集群。
import numpy as np
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
# 生成示例數(shù)據(jù)
X = np.array([[1], [2], [3], [4], [5]])
# 創(chuàng)建K-Means模型并擬合數(shù)據(jù)
model = KMeans(n_clusters=2)
model.fit(X)
# 預(yù)測
y_pred = model.predict(X)
# 繪制結(jié)果
plt.scatter(X, np.zeros_like(X), c=y_pred, cmap='viridis')
plt.title("K-Means Clustering Example")
plt.xlabel("X")
plt.show()9. 主成分分析 (Principal Component Analysis, PCA)
主成分分析(PCA, Principal Component Analysis)是一種常用的數(shù)據(jù)降維技術(shù),旨在將一組可能相關(guān)的變量轉(zhuǎn)換為一組線性不相關(guān)的變量,稱為主成分,同時盡可能多地保留原始數(shù)據(jù)集的信息。
import numpy as np
from sklearn.decomposition import PCA
import matplotlib.pyplot as plt
# 生成示例數(shù)據(jù)
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
# 創(chuàng)建PCA模型并擬合數(shù)據(jù)
pca = PCA(n_components=2)
X_r = pca.fit_transform(X)
# 繪制結(jié)果
plt.scatter(X_r[:, 0], X_r[:, 1])
plt.title("PCA Example")
plt.xlabel("Principal Component 1")
plt.ylabel("Principal Component 2")
plt.show()10. 梯度提升 (Gradient Boosting)
梯度提升模型是一種集成學(xué)習(xí)方法,通過迭代地訓(xùn)練多個弱學(xué)習(xí)器(通常是決策樹),并將它們組合成一個強學(xué)習(xí)器。梯度提升(Gradient Boosting)模型可以通過分析特征重要性來幫助我們理解數(shù)據(jù)中各個特征的相對重要程度。
import numpy as np
from sklearn.ensemble import GradientBoostingClassifier
# 生成示例數(shù)據(jù)
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([0, 0, 0, 1, 1])
# 創(chuàng)建梯度提升模型并擬合數(shù)據(jù)
model = GradientBoostingClassifier(n_estimators=10)
model.fit(X, y)
# 預(yù)測
y_pred = model.predict(X)
print("Predictions:", y_pred)總結(jié)
到此這篇關(guān)于Python機器學(xué)習(xí)10大經(jīng)典算法的講解和示例的文章就介紹到這了,更多相關(guān)Python機器學(xué)習(xí)10大經(jīng)典算法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyQt彈出式對話框的常用方法及標(biāo)準(zhǔn)按鈕類型
這篇文章主要為大家詳細(xì)介紹了PyQt彈出式對話框的常用方法及標(biāo)準(zhǔn)按鈕類型,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02
運行tensorflow python程序,限制對GPU和CPU的占用操作
今天小編就為大家分享一篇運行tensorflow python程序,限制對GPU和CPU的占用操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
Flask框架URL管理操作示例【基于@app.route】
這篇文章主要介紹了Flask框架URL管理操作,結(jié)合實例形式分析了@app.route進行URL控制的相關(guān)操作技巧,需要的朋友可以參考下2018-07-07
國產(chǎn)化設(shè)備鯤鵬CentOS7上源碼安裝Python3.7的過程詳解
這篇文章主要介紹了國產(chǎn)化設(shè)備鯤鵬CentOS7上源碼安裝Python3.7,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-05-05
Django3.2 自動發(fā)現(xiàn)所有路由代碼詳解
這篇文章主要為大家介紹了Django自動發(fā)現(xiàn)所有路由的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12
Python3用tkinter和PIL實現(xiàn)看圖工具
這篇文章給大家分享了Python3用tkinter和PIL實現(xiàn)看圖工具的詳細(xì)實例代碼,有興趣的朋友參考學(xué)習(xí)下。2018-06-06

