機(jī)器學(xué)習(xí)第1天:線性回歸(代碼篇)

這篇文章中,我們要通過(guò)鳶尾花的花瓣長(zhǎng)度預(yù)測(cè)花瓣寬度

  • 環(huán)境:Python3.6.5
  • 編譯器:jupyter notebook
  • 代碼|數(shù)據(jù):微信公眾號(hào)(明天依舊可好)中回復(fù):第1天

來(lái)自專題:【機(jī)器學(xué)習(xí)100天】

一、具體實(shí)現(xiàn)步驟

1. 導(dǎo)入Iris鳶尾花數(shù)據(jù)集

Iris鳶尾花數(shù)據(jù)集共有150條記錄,分別是:

  • 50條山鳶尾 (Iris-setosa)
  • 50條變色鳶尾(Iris-versicolor)
  • 50條維吉尼亞鳶尾(Iris-virginica)
url = "https://archive.ics.uci.edu/ml/machine-learning-databases/iris/iris.data"  
names = ['花萼-length', '花萼-width', '花瓣-length', '花瓣-width', 'class']  
dataset = pd.read_csv(url, names=names)

2. 提取花瓣數(shù)據(jù)

下面我們提取數(shù)據(jù)集中花瓣寬度花瓣長(zhǎng)度數(shù)據(jù),將花瓣數(shù)據(jù)分為訓(xùn)練數(shù)據(jù)測(cè)試數(shù)據(jù),訓(xùn)練數(shù)據(jù)用于訓(xùn)練線性回歸模型,測(cè)試數(shù)據(jù)用于檢測(cè)我們的模型的準(zhǔn)確率。

最終我們要達(dá)到的效果是:輸入花瓣寬度,通過(guò)模型預(yù)測(cè)花瓣寬度。

X = dataset["花瓣-length"]
Y = dataset["花瓣-width"]
X = X.reshape(len(X),1)
Y = Y.reshape(len(Y),1)

3. 拆分?jǐn)?shù)據(jù)

將數(shù)據(jù)集拆分?jǐn)?shù)據(jù)集成訓(xùn)練集、測(cè)試集

from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)

4. 訓(xùn)練模型

這里我們需要將我們的訓(xùn)練數(shù)據(jù)喂給模型進(jìn)行訓(xùn)練。

from sklearn.linear_model import LinearRegression
regressor = LinearRegression()
regressor = regressor.fit(X_train, Y_train)

二、可視化結(jié)果展示

1. 訓(xùn)練集

將訓(xùn)練集中每一朵花的花瓣數(shù)據(jù)與線性回歸模型預(yù)測(cè)的結(jié)果放到同一張統(tǒng)計(jì)圖中。

import matplotlib.pyplot as plt

plt.scatter(X_train, Y_train, color='red')
plt.plot(X_train, regressor.predict(X_train), color='green')
plt.xlabel("Iris-length") 
plt.ylabel("Iris-width") 
plt.title("This is train dataset-kzb")
plt.show()

紅色的點(diǎn)是訓(xùn)練數(shù)據(jù)集中的花瓣數(shù)據(jù),我們不難看出花瓣長(zhǎng)度與寬度是一個(gè)線性關(guān)系,綠色的線是我們模型擬合的結(jié)果。


在這里插入圖片描述

2. 測(cè)試集

將測(cè)試集中每一朵花的花瓣數(shù)據(jù)與線性回歸模型預(yù)測(cè)的結(jié)果放到同一張統(tǒng)計(jì)圖中。

plt.scatter(X_test, Y_test, color='blue')
plt.plot(X_train, regressor.predict(X_train), color='green')
plt.xlabel("Iris-length") 
plt.ylabel("Iris-width") 
plt.title("This is test dataset-kzb")
plt.show()

綠色的點(diǎn)是測(cè)試數(shù)據(jù)集中的花瓣數(shù)據(jù),我們可以看出這部分?jǐn)?shù)據(jù)也是符合線性關(guān)系的,隨著集的增大,線性關(guān)系會(huì)更加明顯。


在這里插入圖片描述

三、相關(guān)知識(shí)點(diǎn)講解

1. train_test_split()函數(shù)

train_test_split():將數(shù)據(jù)集劃分為測(cè)試集與訓(xùn)練集。

  • X:所要?jiǎng)澐值恼w數(shù)據(jù)的特征集;
  • Y:所要?jiǎng)澐值恼w數(shù)據(jù)的結(jié)果;
  • test_size:測(cè)試集數(shù)據(jù)量在整體數(shù)據(jù)量中的占比(可以理解為X_test與X的比值);
  • random_state:①若不填或者填0,每次生成的數(shù)據(jù)都是隨機(jī),可能不一樣。②若為整數(shù),每次生成的數(shù)據(jù)都相同;
from sklearn.model_selection import train_test_split
X_train, X_test, Y_train, Y_test = train_test_split(X, Y, test_size=0.2, random_state=0)

2. LinearRegression()函數(shù)

sklearn.linear_model包實(shí)現(xiàn)了廣義線性模型,包括線性回歸、Ridge回歸、Bayesian回歸等。LinearRegression是其中較為簡(jiǎn)單的線性回歸模型。

解釋一下什么是回歸:回歸最簡(jiǎn)單的定義是,給出一個(gè)點(diǎn)集D,用一個(gè)函數(shù)去擬合這個(gè)點(diǎn)集,并且使得點(diǎn)集與擬合函數(shù)間的誤差最小,如果這個(gè)函數(shù)曲線是一條直線,那就被稱為線性回歸,如果曲線是一條二次曲線,就被稱為二次回歸。

3. 散點(diǎn)圖與折線統(tǒng)計(jì)圖的繪制

plt.scatter():繪畫(huà)出數(shù)據(jù)的散點(diǎn)圖
plt.plot():繪畫(huà)出依據(jù)模型(LinearRegression的線性回歸模型)生成的直線

更詳細(xì)的介紹可以參考:【Matplotlib可視化系列教程】


【機(jī)器學(xué)習(xí)100天目錄】
【機(jī)器學(xué)習(xí)第2天:線性回歸(理論篇)】
【機(jī)器學(xué)習(xí)第3天:預(yù)測(cè)汽車的燃油效率】
【機(jī)器學(xué)習(xí)第4天:預(yù)測(cè)1立方米混凝土抗壓強(qiáng)度】
【機(jī)器學(xué)習(xí)第5天:邏輯回歸】

如有錯(cuò)誤歡迎指教,有問(wèn)題的也可以加入QQ群(1149530473)向我提問(wèn),關(guān)注微信公眾號(hào)(明天依舊可好)和我同步。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容