溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何使用scikit-learn機(jī)器學(xué)習(xí)庫(kù)做預(yù)測(cè)

發(fā)布時(shí)間:2021-11-10 09:29:51 來(lái)源:億速云 閱讀:344 作者:柒染 欄目:大數(shù)據(jù)

本篇文章給大家分享的是有關(guān)如何使用scikit-learn機(jī)器學(xué)習(xí)庫(kù)做預(yù)測(cè),小編覺(jué)得挺實(shí)用的,因此分享給大家學(xué)習(xí),希望大家閱讀完這篇文章后可以有所收獲,話(huà)不多說(shuō),跟著小編一起來(lái)看看吧。

scikit-learn是基于Python的一個(gè)機(jī)器學(xué)習(xí)庫(kù),你可以在scikit-learn庫(kù)中選擇合適的模型,使用它訓(xùn)練數(shù)據(jù)集并對(duì)新數(shù)據(jù)集作出預(yù)測(cè)。

對(duì)于初學(xué)者來(lái)說(shuō),有一個(gè)共同的困惑:

怎么使用scikit-learn庫(kù)中的模型做預(yù)測(cè)

廢話(huà)少說(shuō),讓我們開(kāi)始吧!

如何使用scikit-learn機(jī)器學(xué)習(xí)庫(kù)做預(yù)測(cè)  
畢加索 作品:愛(ài)、名聲和悲劇

一、選擇模型

模型選擇是機(jī)器學(xué)習(xí)的第一步。

你可以使用K折交叉驗(yàn)證或者分割訓(xùn)練集/測(cè)試集的方法處理數(shù)據(jù)集,并用來(lái)訓(xùn)練模型。這樣做為了能夠讓訓(xùn)練出來(lái)的模型對(duì)新數(shù)據(jù)集做出預(yù)測(cè)。

還要判斷該問(wèn)題是分類(lèi)問(wèn)題還是回歸問(wèn)題,分類(lèi)問(wèn)題預(yù)測(cè)的是類(lèi)別、標(biāo)簽,一般來(lái)說(shuō)是二分類(lèi)即(0,1),比如是否下雨?;貧w問(wèn)題預(yù)測(cè)的是連續(xù)的數(shù)值,比如股票的價(jià)格。

二、如何使用分類(lèi)模型

分類(lèi)問(wèn)題是指模型學(xué)習(xí)輸入特征和輸出標(biāo)簽之間的映射關(guān)系,然后對(duì)新的輸入預(yù)測(cè)標(biāo)簽。拿識(shí)別垃圾郵件舉例,輸入的是郵件的文本、時(shí)間、標(biāo)題等等特征,而輸出的則是垃圾郵件和非垃圾郵件兩個(gè)標(biāo)簽。模型通過(guò)訓(xùn)練數(shù)據(jù)集,學(xué)習(xí)特征與標(biāo)簽的關(guān)系,才能做出預(yù)測(cè)。

下面給出一個(gè)簡(jiǎn)單的,針對(duì)二進(jìn)制分類(lèi)問(wèn)題的LogisticRegression(邏輯回歸)模型代碼示例。

雖然我們用的是LogisticRegression(邏輯回歸)分類(lèi)模型解決問(wèn)題,但scikit-learn中的其它分類(lèi)模型同樣適用。

# 導(dǎo)入LogisticRegression方法
from sklearn.linear_model import LogisticRegression
# 導(dǎo)入數(shù)據(jù)生成器
from sklearn.datasets.samples_generator import make_blobs
# 生成2維數(shù)據(jù),類(lèi)別是2類(lèi)
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# 訓(xùn)練模型
model = LogisticRegression()
model.fit(X, y)

注:make_blobs為聚類(lèi)數(shù)據(jù)生成器

這里特別介紹兩種分類(lèi)預(yù)測(cè)的模型,類(lèi)別預(yù)測(cè)和概率預(yù)測(cè)。

1、類(lèi)別預(yù)測(cè)

類(lèi)別預(yù)測(cè):給定模型并訓(xùn)練數(shù)據(jù)實(shí)例后,通過(guò)scikit-learn的predict()函數(shù)預(yù)測(cè)新數(shù)據(jù)實(shí)例的類(lèi)別。

比如,Xnew數(shù)組中有一個(gè)或多個(gè)數(shù)據(jù)實(shí)例,這個(gè)數(shù)組可以傳遞給predict()函數(shù),用來(lái)預(yù)測(cè)每個(gè)實(shí)例的類(lèi)別。

Xnew = [[...], [...]]
ynew = model.predict(Xnew)

輸入代碼:

# 類(lèi)別預(yù)測(cè)案例
from sklearn.linear_model import LogisticRegression
from sklearn.datasets.samples_generator import make_blobs
# 生成數(shù)據(jù)集,有100個(gè)實(shí)列即100行,目標(biāo)類(lèi)別有2個(gè):(0,1)
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# 擬合模型
model = LogisticRegression()
model.fit(X, y)

# 生成新的預(yù)測(cè)數(shù)據(jù)集,有3個(gè)實(shí)例。這里的新實(shí)例可以為1個(gè)或多個(gè)
Xnew, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1)
# 開(kāi)始預(yù)測(cè)
ynew = model.predict(Xnew)
# 展示類(lèi)別的預(yù)測(cè)結(jié)果
print('預(yù)測(cè)類(lèi)別:')
for i in range(len(Xnew)):
print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))
# 展示數(shù)據(jù)集真實(shí)類(lèi)別
print('真實(shí)類(lèi)別:')
for i in range(len(Xnew)):
print("X=%s, Predicted=%s" % (Xnew[i], _[i]))

輸出結(jié)果:

預(yù)測(cè)類(lèi)別:  
X=[-0.79415228 2.10495117], Predicted=0  
X=[-8.25290074 -4.71455545], Predicted=1  
X=[-2.18773166 3.33352125], Predicted=0  
真實(shí)類(lèi)別:  
X=[-0.79415228 2.10495117], Real=0  
X=[-8.25290074 -4.71455545], Real=1  
X=[-2.18773166 3.33352125], Real=0

可以看到,預(yù)測(cè)值和真實(shí)值一樣,說(shuō)明準(zhǔn)確率100%。

  • 關(guān)于字符串類(lèi)別標(biāo)簽的小提示

有時(shí)候,數(shù)據(jù)集的類(lèi)別可能是字符串,比如(是,否)、(熱,冷)等,但模型并不接受字符串輸入輸出,必須將字符串類(lèi)別轉(zhuǎn)化為整數(shù)的形式,比如(1,0)對(duì)應(yīng)(是,否)。

scikit-learn提供LabelEncoder函數(shù),用以將字符串轉(zhuǎn)換為整數(shù)。

2、概率預(yù)測(cè)

另一種分類(lèi)模型是預(yù)測(cè)數(shù)據(jù)實(shí)例屬于每個(gè)類(lèi)別的概率,如果有2個(gè)類(lèi)別(0,1),則預(yù)測(cè)輸出值為0的概率和1概率。

比如,Xnew數(shù)組中有一個(gè)或多個(gè)數(shù)據(jù)實(shí)例,這個(gè)數(shù)組可以傳遞給predict_proba()函數(shù),用來(lái)預(yù)測(cè)每個(gè)實(shí)例的類(lèi)別。

Xnew = [[...], [...]]
ynew = model.predict_proba(Xnew)

概率預(yù)測(cè)只適用于能夠進(jìn)行概率預(yù)測(cè)的模型,大多數(shù)(不是全部)模型可以做到。

下面的例子,通過(guò)訓(xùn)練好的模型對(duì)Xnew數(shù)組中的每個(gè)實(shí)例進(jìn)行概率預(yù)測(cè)。

輸入代碼:

# 概率預(yù)測(cè)案例
from sklearn.linear_model import LogisticRegression
from sklearn.datasets.samples_generator import make_blobs
# 生成數(shù)據(jù)集,有100個(gè)實(shí)列即100行,目標(biāo)類(lèi)別有2個(gè):(0,1)
X, y = make_blobs(n_samples=100, centers=2, n_features=2, random_state=1)
# 訓(xùn)練模型
model = LogisticRegression()
model.fit(X, y)

# 生成新的預(yù)測(cè)集,有3個(gè)實(shí)例即3行
Xnew, _ = make_blobs(n_samples=3, centers=2, n_features=2, random_state=1)
# 開(kāi)始預(yù)測(cè)
ynew = model.predict_proba(Xnew)
# 展示預(yù)測(cè)的類(lèi)別概率,分別生成為0的概率和為1的概率
print('預(yù)測(cè)的類(lèi)別概率:')
for i in range(len(Xnew)):
print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))
print('真實(shí)類(lèi)別:')
for i in range(len(Xnew)):
print("X=%s, Predicted=%s" % (Xnew[i], _[i]))

輸出結(jié)果:

預(yù)測(cè)的類(lèi)別概率:  
X=[-0.79415228 2.10495117], Predicted=[0.94556472 0.05443528]  
X=[-8.25290074 -4.71455545], Predicted=[3.60980873e-04 9.99639019e-01]  
X=[-2.18773166 3.33352125], Predicted=[0.98437415 0.01562585]  
真實(shí)類(lèi)別:  
X=[-0.79415228 2.10495117], Real=0  
X=[-8.25290074 -4.71455545], Real=1  
X=[-2.18773166 3.33352125], Real=0

概率預(yù)測(cè)的輸出可以理解為:輸出每個(gè)類(lèi)別的概率,有多少個(gè)類(lèi)別就有多少個(gè)概率值。

回歸預(yù)測(cè)

回歸預(yù)測(cè)和分類(lèi)預(yù)測(cè)一樣,都是一種監(jiān)督學(xué)習(xí)。通過(guò)訓(xùn)練給定的示例即訓(xùn)練集,模型學(xué)習(xí)到輸入特征和輸出值之間的映射關(guān)系,如輸出值為0.1,0.4,0.8......

下面代碼用的最常見(jiàn)的LinearRegression線(xiàn)性回歸預(yù)測(cè)模型,當(dāng)然你也可以用其它所有回歸模型來(lái)實(shí)踐它。

輸入代碼:

# 線(xiàn)性回歸預(yù)測(cè)案例
# 導(dǎo)入相關(guān)方法
from sklearn.linear_model import LinearRegression
from sklearn.datasets import make_regression
# 生成隨機(jī)回歸訓(xùn)練數(shù)據(jù)集,有100個(gè)實(shí)列即100行
X, y = make_regression(n_samples=100, n_features=2, noise=0.1, random_state=1)
# 擬合模型
model = LinearRegression()
model.fit(X, y)

# 生成新的預(yù)測(cè)集,有3個(gè)實(shí)例即3行
Xnew, _ = make_regression(n_samples=3, n_features=2, noise=0.1, random_state=1)
# 開(kāi)始預(yù)測(cè)
ynew = model.predict(Xnew)
# 展示預(yù)測(cè)的值
print('預(yù)測(cè)值:')
for i in range(len(Xnew)):
print("X=%s, Predicted=%s" % (Xnew[i], ynew[i]))
# 展示真實(shí)的值
print('真實(shí)值:')
for i in range(len(Xnew)):
print("X=%s, Real=%s" % (Xnew[i], _[i]))

注:make_regression函數(shù)為隨機(jī)回歸數(shù)據(jù)集生成器

輸出結(jié)果:

預(yù)測(cè)值:  
X=[-1.07296862 -0.52817175], Predicted=-80.24979831685631  
X=[-0.61175641 1.62434536], Predicted=120.64928064345101  
X=[-2.3015387 0.86540763], Predicted=0.5518357031232064  
真實(shí)值:  
X=[-1.07296862 -0.52817175], Real=-95.68750948023445  
X=[-0.61175641 1.62434536], Real=26.204828091429512  
X=[-2.3015387 0.86540763], Real=-121.28229571474058

小編分別用scikit-learn庫(kù)中的分類(lèi)模型和回歸模型做了預(yù)測(cè),并解釋了這兩種預(yù)測(cè)模型的區(qū)別,你也可以探索其它相關(guān)函數(shù)并實(shí)現(xiàn)文中的案例。

以上就是如何使用scikit-learn機(jī)器學(xué)習(xí)庫(kù)做預(yù)測(cè),小編相信有部分知識(shí)點(diǎn)可能是我們?nèi)粘9ぷ鲿?huì)見(jiàn)到或用到的。希望你能通過(guò)這篇文章學(xué)到更多知識(shí)。更多詳情敬請(qǐng)關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI