這篇文章中,我們要通過(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)(明天依舊可好)和我同步。