日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[机器学习与scikit-learn-29]:算法-回归-普通线性回归LinearRegression拟合线性分布数据的代码示例

發布時間:2023/12/16 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [机器学习与scikit-learn-29]:算法-回归-普通线性回归LinearRegression拟合线性分布数据的代码示例 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者主頁(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文網址:


目錄

第1章 LinearRegression類說明

第2章 LinearRegression使用的代碼示例

2.1 導入庫

2.2 導數數據集

2.3 分割數據集

2.4?建立模型與進行訓練

2.5 MSE、MAE評估

2.6 R2評估

2.7 模型指標分析


第1章 LinearRegression類說明

  • fit_intercept: y = kx + b,b就是截距,這里指定是否需要帶參數。
  • normalize:是否需要對數據進行中心化。
  • copy_X:是否需要對X樣本進行拷貝,當使用normalize時,是否需要覆蓋輸入樣本。

線性回歸的類可能是最簡單的類,僅有四個參數就可以完成一個完整的算法。

并且看得出,這些參數中并沒有一個是必填的,都有默認值,更沒有對我們的模型有不可替代作用的超參數。

這說明,線性回歸的性能,往往取決于數據本身,并沒有可以調整的模型的超參數,線性回歸也因此對數據有著很高的要求。

幸運的是,現實中大部分連續型變量之間,都存在著或多或少的線性聯系。所以線性回歸雖然簡單,卻很強大。
同時,sklearn中的線性回歸可以處理多標簽問題,只需要在fit的時候輸入多維度標簽就可以了。

備注:

本文的重點放在用線性模型擬合線性分布的多維度數據。

第2章 LinearRegression使用的代碼示例

2.1 導入庫

#1.導入庫 from sklearn.linear_model import LinearRegression as LR from sklearn.model_selection import train_test_split from sklearn.model_selection import cross_val_score from sklearn.datasets import fetch_california_housing as fch #加利福尼亞房屋價值數據集 import pandas as pd

2.2 導數數據集

#2. 導入數據集 housevalue = fch() #會需要下載,大家可以提前運行試試看 X = pd.DataFrame(housevalue.data) #放入DataFrame中便于查看 y = housevalue.target print(X.shape) print(y.shape)print(X.head()) print(housevalue.feature_names) X.columns = housevalue.feature_names X.columns """ MedInc:該街區住戶的收入中位數 HouseAge:該街區房屋使用年代的中位數 AveRooms:該街區平均的房間數目 AveBedrms:該街區平均的臥室數目 Population:街區人口 AveOccup:平均入住率 Latitude:街區的緯度 Longitude:街區的經度 """# 打印排序后的樣本標簽值 plt.plot(range(len(y)) ,sorted(y) ) (20640, 8) (20640,)0 1 2 3 4 5 6 7 0 8.3252 41.0 6.984127 1.023810 322.0 2.555556 37.88 -122.23 1 8.3014 21.0 6.238137 0.971880 2401.0 2.109842 37.86 -122.22 2 7.2574 52.0 8.288136 1.073446 496.0 2.802260 37.85 -122.24 3 5.6431 52.0 5.817352 1.073059 558.0 2.547945 37.85 -122.25 4 3.8462 52.0 6.281853 1.081081 565.0 2.181467 37.85 -122.25 ['MedInc', 'HouseAge', 'AveRooms', 'AveBedrms', 'Population', 'AveOccup', 'Latitude', 'Longitude']

房價有最低值和最高值.

2.3 分割數據集

#3. 分割數據集 Xtrain, Xtest, Ytrain, Ytest = train_test_split(X,y,test_size=0.3,random_state=420) for i in [Xtrain, Xtest]:i.index = range(i.shape[0])print(X.shape) print(Xtrain.shape) print(Xtest.shape) (20640, 8) (14448, 8) (6192, 8)

2.4?建立模型與進行訓練

#4. 建立模型并進行訓練 model = LR() model = model.fit(Xtrain, Ytrain)# 模型預測 Y_pred = model.predict(Xtest) print("預測值:", Y_pred)# 訓練好的模型參數: y = k*x + b print("訓練好的模型參數:") print("截距b的值 :", model.intercept_) print("特征權重系數K的值:", model.coef_)# 模型特征權重值與特征的名稱組合起來 [*zip(Xtrain.columns,model.coef_)] 預測值: [1.51384887 0.46566247 2.2567733 ... 2.11885803 1.76968187 0.73219077] 訓練好的模型參數: 截距b的值 : -36.25689322920384 特征權重系數K的值: [ 4.37358931e-01 1.02112683e-02 -1.07807216e-01 6.26433828e-015.21612535e-07 -3.34850965e-03 -4.13095938e-01 -4.26210954e-01] 預測值: [1.51384887 0.46566247 2.2567733 ... 2.11885803 1.76968187 0.73219077] 訓練好的模型參數: 截距b的值 : -36.25689322920384 特征權重系數K的值: [ 4.37358931e-01 1.02112683e-02 -1.07807216e-01 6.26433828e-015.21612535e-07 -3.34850965e-03 -4.13095938e-01 -4.26210954e-01]

Out[26]:

[('MedInc', 0.4373589305968406),('HouseAge', 0.010211268294493916),('AveRooms', -0.1078072161731777), ('AveBedrms', 0.6264338275363787),('Population', 5.216125353122233e-07),('AveOccup', -0.003348509646333547),('Latitude', -0.41309593789477145),('Longitude', -0.4262109536208467)] 備注:影響房價的主要因素為:

('AveBedrms', 0.6264338275363787),? ?# 房間數

[('MedInc', 0.4373589305968406),? ? ? ? ?# 該街區住戶的收入中位數

2.5 MSE、MAE評估

# 5. MSE評估指標 import sklearn from sklearn.metrics import mean_squared_error as MSEmse_score = MSE(Y_pred, Ytest) print("均分誤差MSE=", mse_score) print("預測最大值:", Y_pred.max()) print("預測最小值:", Y_pred.min()) print("標簽最大值:", y.max()) print("標簽最小值:", y.min())# 對訓練好的模型進行交叉驗證 # cv=交叉驗證的次數 # scoring:打分指標:neg_mean_squared_error, # 在sklearn交叉驗證中,損失/誤差都是用負數表示,去掉負號,就是它的均分誤差值 # 負號:表示損失!!! mse_score = cross_val_score(model, X,y,cv=5, scoring="neg_mean_squared_error") print("交叉驗證的MSE=", mse_score)mse_score = cross_val_score(model, X,y,cv=5, scoring="neg_mean_absolute_error") print("交叉驗證的MAE=", mse_score)# 打印有哪些評估指標 sorted(sklearn.metrics.SCORERS.keys()) 均分誤差MSE= 0.5309012639324571 預測最大值: 7.146198214270875 預測最小值: -0.6528439725036179 標簽最大值: 5.00001 標簽最小值: 0.14999 交叉驗證的MSE= [-0.48485857 -0.62249739 -0.64621047 -0.5431996 -0.49468484] 交叉驗證的MAE= [-0.54599439 -0.5661782 -0.57654952 -0.53190614 -0.5168527 ]

2.6 R2評估

# 6. R2評估指標: 反應了模型準確性的指標 # R2的值越接近1,模型的準確性越好 # R2的值越接近0,模型的準確性越差 from sklearn.metrics import r2_score r2 = r2_score(Ytest,Y_pred) print("r2=",r2)r2 = model.score(Xtest,Ytest) print("r2=",r2) r2= 0.6043668160178817 r2= 0.6043668160178817

備注:

R2越接近1,指標越好

0.6左右的R2指標不算好,

2.7 模型指標分析

# 查找指標不好的原因 import matplotlib.pyplot as plt print("Ytest.min", Ytest.min()) print("Ytest.max", Ytest.max()) print("Y_pred.min", Y_pred.min()) print("Y_pred.max", Y_pred.max()) plt.plot(range(len(Ytest)) ,sorted(Ytest), c="black",label= "Data") plt.plot(range(len(Y_pred)),sorted(Y_pred),c="red", label = "Predict") plt.legend() plt.show() ### 備注 # 預測值的走勢與樣本標簽值的走勢在界限范圍內基本相似 # 預測值在兩邊的邊界相差較大,預測值會趨于正無窮和負無窮 # 而標簽樣本中的數值是有上限制與下限 Ytest.min 0.14999 Ytest.max 5.00001 Y_pred.min -0.6528439725036179 Y_pred.max 7.146198214270875


作者主頁(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文網址:

總結

以上是生活随笔為你收集整理的[机器学习与scikit-learn-29]:算法-回归-普通线性回归LinearRegression拟合线性分布数据的代码示例的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。