最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

前言:

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

線性回歸模型

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

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

下面從一個簡單示例開始:

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

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

但是現(xiàn)實數(shù)據(jù)不會這么直接。下面示例數(shù)據(jù)來自Vehicles.txt文件。每行數(shù)據(jù)使用逗號分割,第一個數(shù)據(jù)為輸入數(shù)據(jù),第二個為輸出數(shù)據(jù),我們的目標(biāo)是發(fā)現(xiàn)線性回歸關(guān)系:基于汽車登記量估計省份人口數(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)讀取每一行,然后基于逗號分裂為兩個變量并轉(zhuǎn)為浮點型。

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

構(gòu)建機(jī)器學(xué)習(xí)模型,需要劃分訓(xùn)練集和測試集,訓(xùn)練集用于構(gòu)建模型,測試集用于驗證模型并檢查模型是否滿足要求。

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])

# 測試數(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)練集,剩余的作為測試集。這時我們構(gòu)造了四個數(shù)組:x_train,x_test,y_train,y_test。

3.訓(xùn)練模型

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

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

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

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

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

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

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ù)測訓(xùn)練數(shù)據(jù)。對于未知數(shù)據(jù)不能確定模型性能,我們需要基于測試數(shù)據(jù)進(jìn)行測試。

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

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

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ù)想的一致,省人口與汽車注冊量成正相關(guān)。

評估模型精度

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

1.計算回歸模型精度

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ù)測效果非常好。計算每個指標(biāo)會很麻煩,一般選擇一兩個指標(biāo)來評估模型。一個好的做法是MSE較低,解釋方差得分較高。

  • Mean absolute error: 所有數(shù)據(jù)集的平均絕對值誤差
  • 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ù)。表示模型對未知樣本的預(yù)測程度。最好的分?jǐn)?shù)是1.0,但也可以是負(fù)值。

模型持久化

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

# 寫入文件
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ù)測結(jié)果與上面一致。

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

相關(guān)文章

  • 一文帶你深入了解Python中的GeneratorExit異常處理

    一文帶你深入了解Python中的GeneratorExit異常處理

    GeneratorExit是Python內(nèi)置的異常,當(dāng)生成器或協(xié)程被強(qiáng)制關(guān)閉時,Python解釋器會向其發(fā)送這個異常,下面我們來看看如何處理這一異常吧
    2025-03-03
  • python刪除指定類型(或非指定)的文件實例詳解

    python刪除指定類型(或非指定)的文件實例詳解

    這篇文章主要介紹了python刪除指定類型(或非指定)的文件,以實例形式較為詳細(xì)的分析了Python刪除文件的相關(guān)技巧,需要的朋友可以參考下
    2015-07-07
  • 如何使用Python JSON解析和轉(zhuǎn)換數(shù)據(jù)

    如何使用Python JSON解析和轉(zhuǎn)換數(shù)據(jù)

    JSON 是文本,使用 JavaScript 對象表示法編寫,Python 有一個內(nèi)置的 json 包,可用于處理 JSON 數(shù)據(jù),本文給大家介紹使用Python JSON解析和轉(zhuǎn)換數(shù)據(jù)的方法,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)

    python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)

    在pymysql中支持對占位符的處理,開發(fā)者需要在SQL中使用“%”定義占位符,在使用excute()方法執(zhí)行時對占位符的數(shù)據(jù)進(jìn)行填充即可,本文給大家介紹python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)的方法,需要的朋友參考下吧
    2021-12-12
  • python離散建模之感知器學(xué)習(xí)算法

    python離散建模之感知器學(xué)習(xí)算法

    這篇文章主要介紹了python離散建模之感知器學(xué)習(xí)算法,感知機(jī)學(xué)習(xí)算法是支持向量機(jī)的基礎(chǔ),支持向量機(jī)通過核函數(shù)進(jìn)行非線性分類,支持向量機(jī)也是感知機(jī)算法的延伸,下面就來介紹感知算法的相關(guān)內(nèi)容,需要的小伙伴可以參考一下
    2022-02-02
  • python基礎(chǔ)中的文件對象詳解

    python基礎(chǔ)中的文件對象詳解

    這篇文章主要為大家介紹了python基礎(chǔ)中的文件對象,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • 三個Python常用的數(shù)據(jù)清洗處理方式總結(jié)

    三個Python常用的數(shù)據(jù)清洗處理方式總結(jié)

    這篇文章主要為大家詳細(xì)介紹了python數(shù)據(jù)處理過程中三個主要的數(shù)據(jù)清洗說明,分別是缺失值/空格/重復(fù)值的數(shù)據(jù)清洗,感興趣的小伙伴可以了解一下
    2022-12-12
  • python中的opencv?圖像梯度

    python中的opencv?圖像梯度

    這篇文章主要介紹了python中的opencv?圖像梯度,圖像梯度計算的是圖像變化的速度,圖像梯度計算需要求導(dǎo)數(shù),但是圖像梯度一般通過計算像素值的差來得到梯度的近似值,下文詳細(xì)介紹需要的小伙伴可以參考一下
    2022-06-06
  • Python3使用PyQt5制作簡單的畫板/手寫板實例

    Python3使用PyQt5制作簡單的畫板/手寫板實例

    下面小編就為大家?guī)硪黄狿ython3使用PyQt5制作簡單的畫板/手寫板實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Python3計算三角形的面積代碼

    Python3計算三角形的面積代碼

    這篇文章主要介紹了Python3計算三角形的面積代碼,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12

最新評論

新疆| 永福县| 五河县| 丰镇市| 巴里| 固始县| 绥芬河市| 红河县| 南皮县| 安福县| 佛山市| 扶绥县| 县级市| 曲松县| 台东县| 承德县| 庆安县| 科技| 中宁县| 浪卡子县| 衡水市| 巴里| 杨浦区| 洪洞县| 博客| 柏乡县| 格尔木市| 姚安县| 扶绥县| 汝阳县| 乌拉特后旗| 博乐市| 红原县| 龙江县| 大厂| 开阳县| 北宁市| 高碑店市| 沙坪坝区| 霍山县| 扶绥县|