亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python構(gòu)建簡(jiǎn)單線性回歸模型

 更新時(shí)間:2022年08月25日 15:45:39   作者:夢(mèng)想畫家  
這篇文章主要介紹了Python構(gòu)建簡(jiǎn)單線性回歸模型,線性回歸表示發(fā)現(xiàn)函數(shù)使用線性組合表示輸入變量。簡(jiǎn)單線性回歸很容易理解,使用了基本的回歸技術(shù),一旦理解了這些基本概念,可以更好地學(xué)習(xí)其他類型的回歸模型

前言:

本文介紹如何構(gòu)建簡(jiǎn)單線性回歸模型及計(jì)算其準(zhǔn)確率,最后介紹如何持久化模型。

線性回歸模型

線性回歸表示發(fā)現(xiàn)函數(shù)使用線性組合表示輸入變量。簡(jiǎn)單線性回歸很容易理解,使用了基本的回歸技術(shù),一旦理解了這些基本概念,可以更好地學(xué)習(xí)其他類型的回歸模型。

回歸用于發(fā)現(xiàn)輸入變量和輸出變量之間的關(guān)系,一般變量為實(shí)數(shù)。我們的目標(biāo)是估計(jì)映射從輸入到輸出的映射核函數(shù)。

下面從一個(gè)簡(jiǎn)單示例開始:

1 --> 2
3 --> 6
4.3 --> 8.6
1.1 --> 14.2

看到上面數(shù)據(jù),估計(jì)你已經(jīng)看出它們之間的關(guān)系:f(x) = 2x

但是現(xiàn)實(shí)數(shù)據(jù)不會(huì)這么直接。下面示例數(shù)據(jù)來自Vehicles.txt文件。每行數(shù)據(jù)使用逗號(hào)分割,第一個(gè)數(shù)據(jù)為輸入數(shù)據(jù),第二個(gè)為輸出數(shù)據(jù),我們的目標(biāo)是發(fā)現(xiàn)線性回歸關(guān)系:基于汽車登記量估計(jì)省份人口數(shù)量。

示例數(shù)據(jù)如下:

145263,    127329
204477,    312027
361034,    573694
616716,    891181
885665,    1059114
773600,    1221218
850513,    1326513
996733,    1543752
827967,    1571053
1011436,1658138
1222738,1970521
2404651,3744398
2259795,4077166
2844588,4404246
2774071,4448146
3011089,4915123
3169307,5074261
3346791,5850850
3702114,5888472
5923476,10008349

1.加載數(shù)據(jù)

import numpy as np
from sklearn import linear_model
import matplotlib.pyplot as plt
import sklearn.metrics as sm
import pickle
filename = "data/vehicles.txt"
x = []
y = []

with open(filename, 'r') as lines:
    for line in lines:
        xt, yt = [float(i) for i in line.split(',')]
        x.append(xt)
        y.append(yt)

上面代碼加載文件至x,y變量中,x是自變量,y是響應(yīng)變量。在循環(huán)內(nèi)讀取每一行,然后基于逗號(hào)分裂為兩個(gè)變量并轉(zhuǎn)為浮點(diǎn)型。

2.劃分訓(xùn)練集和測(cè)試集

構(gòu)建機(jī)器學(xué)習(xí)模型,需要?jiǎng)澐钟?xùn)練集和測(cè)試集,訓(xùn)練集用于構(gòu)建模型,測(cè)試集用于驗(yàn)證模型并檢查模型是否滿足要求。

num_training = int(0.8 * len(x))
num_test = len(x) - num_training

# 訓(xùn)練數(shù)據(jù)占80%
x_train = np.array(x[: num_training]).reshape((num_training, 1))
y_train = np.array(y[: num_training])

# 測(cè)試數(shù)據(jù)占20%
x_test = np.array(x[num_training:]).reshape((num_test, 1))
y_test = np.array(y[num_training:])

首先取80%數(shù)據(jù)作為訓(xùn)練集,剩余的作為測(cè)試集。這時(shí)我們構(gòu)造了四個(gè)數(shù)組:x_train,x_test,y_train,y_test。

3.訓(xùn)練模型

現(xiàn)在準(zhǔn)備訓(xùn)練模型,需要使用regressor對(duì)象。

# Create linear regression object
linear_regressor = linear_model.LinearRegression()

# Train the model using the training sets
linear_regressor.fit(x_train, y_train)

首先從sklearn庫(kù)中導(dǎo)入linear_model方法,用于實(shí)現(xiàn)線性回歸,里面包括目標(biāo)值:輸入變量的線性組合。然后使用LinearRegression() 函數(shù)執(zhí)行最小二乘法執(zhí)行線性回歸。最后fit函數(shù)用于擬合線性模型,需要傳入兩個(gè)參數(shù):x_train,y_train。

4.預(yù)測(cè)數(shù)據(jù)

上面基于訓(xùn)練集擬合線性模型,使用fit方法接收訓(xùn)練數(shù)據(jù)訓(xùn)練模型。為了查看擬合程度,我們可以使用訓(xùn)練數(shù)據(jù)進(jìn)行預(yù)測(cè):

y_train_pred = linear_regressor.predict(X_train)

5.畫圖展示線性擬合情況

plt.figure()
plt.scatter(x_train, y_train, color='green')
plt.plot(x_train, y_train_pred, color='black', linewidth=4)
plt.title('Training data')
plt.show()

生成圖示如下:

前面使用訓(xùn)練模型預(yù)測(cè)訓(xùn)練數(shù)據(jù)。對(duì)于未知數(shù)據(jù)不能確定模型性能,我們需要基于測(cè)試數(shù)據(jù)進(jìn)行測(cè)試。

6.預(yù)測(cè)數(shù)據(jù)測(cè)試

下面基于測(cè)試數(shù)據(jù)進(jìn)行預(yù)測(cè)并畫圖展示:

y_test_pred = linear_regressor.predict(x_test)
plt.figure()
plt.scatter(x_test, y_test, color='green')
plt.plot(x_test, y_test_pred, color='black', linewidth=4)
plt.title('Test data')
plt.show()

與我們預(yù)想的一致,省人口與汽車注冊(cè)量成正相關(guān)。

評(píng)估模型精度

上面構(gòu)建了回歸模型,但我們需要評(píng)估模型的質(zhì)量。這里我們定義錯(cuò)誤為實(shí)際值與預(yù)測(cè)值之間的差異,下面我們看如何計(jì)算回歸模型的精度。

1.計(jì)算回歸模型精度

print("MAE =", round(sm.mean_absolute_error(y_test, y_test_pred), 2))
print("MSE =", round(sm.mean_squared_error(y_test,  y_test_pred), 2))
print("Median absolute error =",
      round(sm.median_absolute_error(y_test, y_test_pred), 2))
print("Explain variance score =",
      round(sm.explained_variance_score(y_test, y_test_pred), 2))
print("R2 score =", round(sm.r2_score(y_test, y_test_pred), 2))

輸出結(jié)果:

MAE = 241907.27
MSE = 81974851872.13
Median absolute error = 240861.94
Explain variance score = 0.98
R2 score = 0.98

R2得分接近1表示模型預(yù)測(cè)效果非常好。計(jì)算每個(gè)指標(biāo)會(huì)很麻煩,一般選擇一兩個(gè)指標(biāo)來評(píng)估模型。一個(gè)好的做法是MSE較低,解釋方差得分較高。

  • Mean absolute error: 所有數(shù)據(jù)集的平均絕對(duì)值誤差
  • Mean squared error: 所有數(shù)據(jù)集的平均誤差平方,是最常用的指標(biāo)之一。
  • Median absolute error: 所有數(shù)據(jù)集的誤差中位數(shù),該指標(biāo)主要用于消除異常值影響
  • Explained variance score: 模型在多大程度上能夠解釋數(shù)據(jù)集中的變化。1.0的分?jǐn)?shù)表明我們的模型是完美的。
  • R2 score: 這被讀作r²,是決定系數(shù)。表示模型對(duì)未知樣本的預(yù)測(cè)程度。最好的分?jǐn)?shù)是1.0,但也可以是負(fù)值。

模型持久化

訓(xùn)練完模型,可以保存至文件中,下次需要模型預(yù)測(cè)可直接從文件加載。
下面看如何持久化模型。需要使用pickle模塊,實(shí)現(xiàn)存儲(chǔ)Python對(duì)象,它是Python標(biāo)準(zhǔn)庫(kù)的一部分。

# 寫入文件
output_model_file = "3_model_linear_regr.pkl"
with open(output_model_file, ' wb') as f:
    pickle.dump(linear_regressor, f)

# 加載使用
with open(output_model_file, ' rb') as f:
    model_linregr = pickle.load(f)

y_test_pred_new = model_linregr.predict(x_test)
print("New mean absolute error =",
      round(sm.mean_absolute_error(y_test, y_test_pred_new), 2))

輸出結(jié)果:

New mean absolute error = 241907.27

這里從文件加載數(shù)據(jù)至model_linregr變量,預(yù)測(cè)結(jié)果與上面一致。

到此這篇關(guān)于Python構(gòu)建簡(jiǎn)單線性回歸模型的文章就介紹到這了,更多相關(guān)Python線性回歸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • pytyon 帶有重復(fù)的全排列

    pytyon 帶有重復(fù)的全排列

    輸入開始排列數(shù)字和結(jié)束排列數(shù)字, 就會(huì)一個(gè)字典序輸出所以的排列情況
    2013-08-08
  • Python基礎(chǔ)第三方模塊requests openpyxl

    Python基礎(chǔ)第三方模塊requests openpyxl

    這篇文章主要為大家介紹了Python基礎(chǔ)第三方模塊requests openpyxl使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-11-11
  • Python提取視頻中圖片的示例(按幀、按秒)

    Python提取視頻中圖片的示例(按幀、按秒)

    這篇文章主要介紹了Python提取視頻中圖片的示例,分別按幀和按秒提取,幫助大家利用python處理視頻,獲取素材,感興趣的朋友可以了解下
    2020-10-10
  • Python生成器深度解析如何構(gòu)建強(qiáng)大的數(shù)據(jù)處理管道

    Python生成器深度解析如何構(gòu)建強(qiáng)大的數(shù)據(jù)處理管道

    這篇文章主要為大家介紹了Python生成器深度解析如何構(gòu)建強(qiáng)大的數(shù)據(jù)處理管道,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • Python基礎(chǔ)教程之增加和去除數(shù)字的千位分隔符

    Python基礎(chǔ)教程之增加和去除數(shù)字的千位分隔符

    千位分隔符其實(shí)就是數(shù)字中的逗號(hào),下面這篇文章主要給大家介紹了關(guān)于Python基礎(chǔ)教程之增加和去除數(shù)字的千位分隔符,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • python實(shí)現(xiàn)人人對(duì)戰(zhàn)的五子棋游戲

    python實(shí)現(xiàn)人人對(duì)戰(zhàn)的五子棋游戲

    這篇文章主要為大家詳細(xì)介紹了python實(shí)現(xiàn)人人對(duì)戰(zhàn)的五子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 詳解在Python中創(chuàng)建條形圖追趕動(dòng)畫

    詳解在Python中創(chuàng)建條形圖追趕動(dòng)畫

    動(dòng)畫是使可視化更具吸引力和用戶吸引力的好方法。它幫助我們以有意義的方式展示數(shù)據(jù)可視化。Matplotlib是一個(gè)非常流行的數(shù)據(jù)可視化庫(kù),通常用于數(shù)據(jù)的圖形表示以及使用內(nèi)置函數(shù)的動(dòng)畫。本文將用Matplotlib繪制條形圖追趕動(dòng)畫,需要的可以參考一下
    2022-03-03
  • python性能測(cè)試對(duì)手機(jī)號(hào)綁定進(jìn)行壓測(cè)

    python性能測(cè)試對(duì)手機(jī)號(hào)綁定進(jìn)行壓測(cè)

    這篇文章主要為大家介紹了python性能測(cè)試對(duì)手機(jī)號(hào)綁定進(jìn)行壓測(cè)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • python面積圖之曲線圖的填充

    python面積圖之曲線圖的填充

    這篇文章主要介紹了python面積圖之曲線圖的填充,文章圍繞主題的相關(guān)資料展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)有所幫助
    2022-06-06
  • python如何實(shí)現(xiàn)單鏈表的反轉(zhuǎn)

    python如何實(shí)現(xiàn)單鏈表的反轉(zhuǎn)

    這篇文章主要介紹了python如何實(shí)現(xiàn)單鏈表的反轉(zhuǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02

最新評(píng)論