Python機(jī)器學(xué)習(xí)庫(kù)scikit-learn使用詳解
前言
scikit-learn是Python中最流行的機(jī)器學(xué)習(xí)庫(kù)之一,它提供了各種各樣的機(jī)器學(xué)習(xí)算法和工具,包括分類、回歸、聚類、降維等。
scikit-learn的優(yōu)點(diǎn)有:
- 簡(jiǎn)單易用:scikit-learn 的接口簡(jiǎn)單易懂,可以讓用戶很容易地上手進(jìn)行機(jī)器學(xué)習(xí)。統(tǒng)一的API:scikit-learn 的 API 非常統(tǒng)一,各種算法的使用方法基本一致,使得學(xué)習(xí)和使用變得更加方便。
- 大量實(shí)現(xiàn)了機(jī)器學(xué)習(xí)算法:scikit-learn 實(shí)現(xiàn)了各種經(jīng)典的機(jī)器學(xué)習(xí)算法,而且提供了豐富的工具和函數(shù),使得算法的調(diào)試和優(yōu)化變得更加容易。
- 開源免費(fèi):scikit-learn 是完全開源的,而且是免費(fèi)的,任何人都可以使用和修改它的代碼。
- 高效穩(wěn)定:scikit-learn 實(shí)現(xiàn)了各種高效的機(jī)器學(xué)習(xí)算法,可以處理大規(guī)模數(shù)據(jù)集,并且在穩(wěn)定性和可靠性方面表現(xiàn)出色。scikit-learn因?yàn)锳PI非常的統(tǒng)一而且模型相對(duì)較簡(jiǎn)單所以非常適合入門機(jī)器學(xué)習(xí)。這里我的推薦方式是結(jié)合官方文檔進(jìn)行學(xué)習(xí),不僅有每個(gè)模型的適用范圍介紹還有代碼樣例。
線性回歸模型-LinearRegression
LinearRegression模型是一種基于線性回歸的模型,適用于解決連續(xù)變量的預(yù)測(cè)問題。該模型的基本思想是建立一個(gè)線性方程,將自變量與因變量之間的關(guān)系建模為一條直線,并利用訓(xùn)練數(shù)據(jù)擬合該直線,從而求出線性方程的系數(shù),再用該方程對(duì)測(cè)試數(shù)據(jù)進(jìn)行預(yù)測(cè)。
LinearRegression模型適用于自變量和因變量之間存在線性關(guān)系的問題,例如房?jī)r(jià)預(yù)測(cè)、銷售預(yù)測(cè)、用戶行為預(yù)測(cè)等。當(dāng)然,當(dāng)自變量和因變量之間的關(guān)系為非線性時(shí),LinearRegression模型的表現(xiàn)會(huì)比較差。此時(shí)可以采用多項(xiàng)式回歸、嶺回歸、Lasso回歸等方法來解決。
準(zhǔn)備數(shù)據(jù)集
在拋開其它因素影響后,學(xué)習(xí)時(shí)間和學(xué)習(xí)成績(jī)之間存在著一定的線性關(guān)系,當(dāng)然這里的學(xué)習(xí)時(shí)間指的是有效學(xué)習(xí)時(shí)間,表現(xiàn)為隨著學(xué)習(xí)時(shí)間的增加成績(jī)也會(huì)增加。所以我們準(zhǔn)備一份學(xué)習(xí)時(shí)間和成績(jī)的數(shù)據(jù)集。數(shù)據(jù)集內(nèi)部分?jǐn)?shù)據(jù)如下:
學(xué)習(xí)時(shí)間,分?jǐn)?shù)
0.5,15
0.75,23
1.0,14
1.25,42
1.5,21
1.75,28
1.75,35
2.0,51
2.25,61
2.5,49
使用LinearRegression
確定特征和目標(biāo)
在學(xué)習(xí)時(shí)間和成績(jī)間,學(xué)習(xí)時(shí)間為特征,也即自變量;成績(jī)?yōu)闃?biāo)簽也即因變量,所以我們需要在準(zhǔn)備好的學(xué)習(xí)時(shí)間和成績(jī)數(shù)據(jù)集中提取特征和標(biāo)簽。
import pandas as pd import numpy as np from sklearn.metrics import r2_score, mean_squared_error from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression # 讀取學(xué)習(xí)時(shí)間和成績(jī)CSV數(shù)據(jù)文件 data = pd.read_csv('data/study_time_score.csv') # 提取數(shù)據(jù)特征學(xué)習(xí)時(shí)間 X = data['學(xué)習(xí)時(shí)間'] # 提取數(shù)據(jù)目標(biāo)(標(biāo)簽)分?jǐn)?shù) Y = data['分?jǐn)?shù)']
劃分訓(xùn)練集和測(cè)試集
在特征及標(biāo)簽數(shù)據(jù)準(zhǔn)備好以后,使用scikit-learn的LinearRegression進(jìn)行訓(xùn)練,將數(shù)據(jù)集劃分為訓(xùn)練集和測(cè)試集。
""" 將特征數(shù)據(jù)和目標(biāo)數(shù)據(jù)劃分為測(cè)試集和訓(xùn)練集 通過test_size=0.25將百分之二十五的數(shù)據(jù)劃分為測(cè)試集 """ X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.25, random_state=0) x_train = X_train.values.reshape(-1, 1) model.fit(x_train, Y_train)
選擇模型,對(duì)數(shù)據(jù)進(jìn)行擬合
將測(cè)試集和訓(xùn)練集準(zhǔn)備好以后,我們就可以選擇合適的模型對(duì)訓(xùn)練集進(jìn)行擬合,以便能夠預(yù)測(cè)出其它特征對(duì)應(yīng)的目標(biāo)
# 選擇模型,選擇模型為L(zhǎng)inearRegression model = LinearRegression() # Scikit-learn中,機(jī)器學(xué)習(xí)模型的輸入必須是一個(gè)二維數(shù)組。我們需要將一維數(shù)組轉(zhuǎn)換為二維數(shù)組,才能在模型中使用。 x_train = X_train.values.reshape(-1, 1) # 進(jìn)行擬合 model.fit(x_train, Y_train)
得到模型參數(shù)
由于數(shù)據(jù)集只包含學(xué)習(xí)時(shí)間和成績(jī)兩個(gè)是一個(gè)很簡(jiǎn)單的線性模型,其背后的數(shù)學(xué)公式也即y=ax+b,其中y因變量也就是成績(jī), x自變量也即學(xué)習(xí)時(shí)間。
""" 輸出模型關(guān)鍵參數(shù) Intercept: 截距 即b Coefficients: 變量權(quán)重 即a """ print('Intercept:', model.intercept_) print('Coefficients:', model.coef_)
回測(cè)
上面擬合模型只用到了測(cè)試集數(shù)據(jù),下面我們需要使用測(cè)試集數(shù)據(jù)對(duì)模型的擬合進(jìn)行一個(gè)回測(cè),在使用訓(xùn)練集擬合后,我們就可以對(duì)特征測(cè)試集進(jìn)行預(yù)測(cè),通過得到的目標(biāo)預(yù)測(cè)結(jié)果與實(shí)際目標(biāo)的值進(jìn)行比較,我們就可以得到模型的擬合度了。
# 轉(zhuǎn)換為n行1列的二維數(shù)組 x_test = X_test.values.reshape(-1, 1) # 在測(cè)試集上進(jìn)行預(yù)測(cè)并計(jì)算評(píng)分 Y_pred = model.predict(x_test) # 打印測(cè)試特征數(shù)據(jù) print(x_test) # 打印特征數(shù)據(jù)對(duì)應(yīng)的預(yù)測(cè)結(jié)果 print(Y_pred) # 將預(yù)測(cè)結(jié)果與原特征數(shù)據(jù)對(duì)應(yīng)的實(shí)際目標(biāo)值進(jìn)行比較,從而獲得模型擬合度 # R2 (R-squared):模型擬合優(yōu)度,取值范圍在0~1之間,越接近1表示模型越好的擬合了數(shù)據(jù)。 print("R2:", r2_score(Y_test, Y_pred))
- 程序運(yùn)行結(jié)果
- 根據(jù)上述的代碼我們需要確定LinearRegression模型的擬合度,也就是這些數(shù)據(jù)到底適合不適合使用線性模型進(jìn)行擬合,程序的運(yùn)行結(jié)果如下:
預(yù)測(cè)結(jié)果:
[47.43726068 33.05457106 49.83437561 63.41802692 41.84399249 37.84880093
23.46611131 37.84880093 26.66226456 71.40841004 18.67188144 88.9872529
63.41802692 42.6430308 21.86803469 69.81033341 66.61418017 33.05457106
58.62379705 50.63341392 18.67188144 41.04495418 20.26995807 77.80071653
28.26034119 13.87765157 61.81995029 90.58532953 77.80071653 36.25072431
84.19302303]
R2: 0.8935675710322939
總結(jié)
上述模型的擬合度達(dá)到了89%,如果你能接受大約10%的誤差,則可以使用LinearRegression模型進(jìn)行預(yù)測(cè)。當(dāng)調(diào)整訓(xùn)練集大小小于25%時(shí),模型的擬合度稍低于89%,數(shù)據(jù)集的大小和訓(xùn)練集的大小等因?yàn)槎紩?huì)影響模型的擬合度,需要不斷嘗試找到擬合效果的參數(shù)設(shè)定。
到此這篇關(guān)于Python機(jī)器學(xué)習(xí)庫(kù)scikit-learn使用詳解的文章就介紹到這了,更多相關(guān)Python scikit-learn內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
在pycharm中debug 實(shí)時(shí)查看數(shù)據(jù)操作(交互式)
這篇文章主要介紹了在pycharm中debug 實(shí)時(shí)查看數(shù)據(jù)操作(交互式),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-06-06python圖形開發(fā)GUI庫(kù)pyqt5的基本使用方法詳解
這篇文章主要介紹了python圖形開發(fā)GUI庫(kù)pyqt5的基本使用方法詳解,需要的朋友可以參考下2020-02-02Python字符串轉(zhuǎn)換成浮點(diǎn)數(shù)函數(shù)分享
本文給大家分享的是一則使用Python實(shí)現(xiàn)字符串轉(zhuǎn)換成浮點(diǎn)數(shù)的代碼,主要是使用map和reduce方法來實(shí)現(xiàn),有需要的小伙伴可以參考下。2015-07-07Python 實(shí)現(xiàn)王者榮耀中的敏感詞過濾示例
今天小編就為大家分享一篇Python 實(shí)現(xiàn)王者榮耀中的敏感詞過濾示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01打包PyQt5應(yīng)用時(shí)的注意事項(xiàng)
這篇文章主要介紹了打包PyQt5應(yīng)用時(shí)的注意事項(xiàng)的相關(guān)資料,需要的朋友可以參考下2020-02-02深入討論P(yáng)ython函數(shù)的參數(shù)的默認(rèn)值所引發(fā)的問題的原因
這篇文章主要介紹了深入討論P(yáng)ython函數(shù)的參數(shù)的默認(rèn)值所引發(fā)的問題的原因,利用了Python解釋器在內(nèi)存地址分配中的過程解釋了參數(shù)默認(rèn)值帶來陷阱的原因,需要的朋友可以參考下2015-03-03pytorch中.to(device) 和.cuda()的區(qū)別說明
這篇文章主要介紹了pytorch中.to(device) 和.cuda()的區(qū)別說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05