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