Python 線性回歸分析以及評(píng)價(jià)指標(biāo)詳解
廢話不多說,直接上代碼吧!
"""
# 利用 diabetes數(shù)據(jù)集來學(xué)習(xí)線性回歸
# diabetes 是一個(gè)關(guān)于糖尿病的數(shù)據(jù)集, 該數(shù)據(jù)集包括442個(gè)病人的生理數(shù)據(jù)及一年以后的病情發(fā)展情況。
# 數(shù)據(jù)集中的特征值總共10項(xiàng), 如下:
# 年齡
# 性別
#體質(zhì)指數(shù)
#血壓
#s1,s2,s3,s4,s4,s6 (六種血清的化驗(yàn)數(shù)據(jù))
#但請(qǐng)注意,以上的數(shù)據(jù)是經(jīng)過特殊處理, 10個(gè)數(shù)據(jù)中的每個(gè)都做了均值中心化處理,然后又用標(biāo)準(zhǔn)差乘以個(gè)體數(shù)量調(diào)整了數(shù)值范圍。
#驗(yàn)證就會(huì)發(fā)現(xiàn)任何一列的所有數(shù)值平方和為1.
"""
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model
from sklearn.metrics import mean_squared_error, r2_score
# Load the diabetes dataset
diabetes = datasets.load_diabetes()
# Use only one feature
# 增加一個(gè)維度,得到一個(gè)體質(zhì)指數(shù)數(shù)組[[1],[2],...[442]]
diabetes_X = diabetes.data[:, np.newaxis,2]
print(diabetes_X)
# Split the data into training/testing sets
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
# Split the targets into training/testing sets
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]
# Create linear regression object
regr = linear_model.LinearRegression()
# Train the model using the training sets
regr.fit(diabetes_X_train, diabetes_y_train)
# Make predictions using the testing set
diabetes_y_pred = regr.predict(diabetes_X_test)
# The coefficients
# 查看相關(guān)系數(shù)
print('Coefficients: \n', regr.coef_)
# The mean squared error
# 均方差
# 查看殘差平方的均值(mean square error,MSE)
print("Mean squared error: %.2f"
% mean_squared_error(diabetes_y_test, diabetes_y_pred))
# Explained variance score: 1 is perfect prediction
# R2 決定系數(shù)(擬合優(yōu)度)
# 模型越好:r2→1
# 模型越差:r2→0
print('Variance score: %.2f' % r2_score(diabetes_y_test, diabetes_y_pred))
# Plot outputs
plt.scatter(diabetes_X_test, diabetes_y_test, color='black')
plt.plot(diabetes_X_test, diabetes_y_pred, color='blue', linewidth=3)
plt.xticks(())
plt.yticks(())
plt.show()
對(duì)于回歸模型效果的判斷指標(biāo)經(jīng)過了幾個(gè)過程,從SSE到R-square再到Ajusted R-square, 是一個(gè)完善的過程:
SSE(誤差平方和):The sum of squares due to error
R-square(決定系數(shù)):Coefficient of determination
Adjusted R-square:Degree-of-freedom adjusted coefficient of determination
下面我對(duì)以上幾個(gè)名詞進(jìn)行詳細(xì)的解釋下,相信能給大家?guī)硪欢ǖ膸椭。?/p>
一、SSE(誤差平方和)
計(jì)算公式如下:

同樣的數(shù)據(jù)集的情況下,SSE越小,誤差越小,模型效果越好
缺點(diǎn):
SSE數(shù)值大小本身沒有意義,隨著樣本增加,SSE必然增加,也就是說,不同的數(shù)據(jù)集的情況下,SSE比較沒有意義
二、R-square(決定系數(shù))

數(shù)學(xué)理解: 分母理解為原始數(shù)據(jù)的離散程度,分子為預(yù)測(cè)數(shù)據(jù)和原始數(shù)據(jù)的誤差,二者相除可以消除原始數(shù)據(jù)離散程度的影響
其實(shí)“決定系數(shù)”是通過數(shù)據(jù)的變化來表征一個(gè)擬合的好壞。
理論上取值范圍(-∞,1], 正常取值范圍為[0 1] ------實(shí)際操作中通常會(huì)選擇擬合較好的曲線計(jì)算R²,因此很少出現(xiàn)-∞
越接近1,表明方程的變量對(duì)y的解釋能力越強(qiáng),這個(gè)模型對(duì)數(shù)據(jù)擬合的也較好
越接近0,表明模型擬合的越差
經(jīng)驗(yàn)值:>0.4, 擬合效果好
缺點(diǎn):
數(shù)據(jù)集的樣本越大,R²越大,因此,不同數(shù)據(jù)集的模型結(jié)果比較會(huì)有一定的誤差
三、Adjusted R-Square (校正決定系數(shù))

n為樣本數(shù)量,p為特征數(shù)量
消除了樣本數(shù)量和特征數(shù)量的影響
以上這篇Python 線性回歸分析以及評(píng)價(jià)指標(biāo)詳解就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
pycharm安裝深度學(xué)習(xí)pytorch的d2l包失敗問題解決
當(dāng)新生在學(xué)習(xí)pytorch時(shí),導(dǎo)入d2l_pytorch包總會(huì)遇到問題,下面這篇文章主要給大家介紹了關(guān)于pycharm安裝深度學(xué)習(xí)pytorch的d2l包失敗問題的解決方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-03-03
Python3爬蟲里關(guān)于識(shí)別微博宮格驗(yàn)證碼的知識(shí)點(diǎn)詳解
在本篇文章里小編給大家分享了關(guān)于Python3爬蟲里關(guān)于識(shí)別微博宮格驗(yàn)證碼的知識(shí)點(diǎn),有興趣的朋友們可以參考下。2020-07-07
Python存儲(chǔ)json數(shù)據(jù)發(fā)生亂碼的解決方法
當(dāng)使用json.dump()把python對(duì)象轉(zhuǎn)換為json后存儲(chǔ)到文件中時(shí),文件可能會(huì)出現(xiàn)亂碼的問題,本篇文章可以幫助您解決亂碼問題,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09
三步實(shí)現(xiàn)Django Paginator分頁(yè)的方法
這篇文章主要介紹了三步實(shí)現(xiàn)Django Paginator分頁(yè)的方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
使用Python為Excel文件添加預(yù)設(shè)和自定義文檔屬性
向Excel文件添加文檔屬性是專業(yè)地組織和管理電子表格數(shù)據(jù)的關(guān)鍵步驟,這些屬性,如標(biāo)題、作者、主題和關(guān)鍵詞,增強(qiáng)了文件的元數(shù)據(jù),使得在大型數(shù)據(jù)庫(kù)或文件系統(tǒng)中跟蹤變得更加容易,本文將介紹如何使用Python高效地為Excel文件添加文檔屬性,需要的朋友可以參考下2024-05-05
Python比較set的規(guī)則及簡(jiǎn)單例子
在Python中,集合可以通過比較運(yùn)算符進(jìn)行比較,檢查子集、超集、相等性等關(guān)系,文中通過代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用python具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-11-11
python wxpython 實(shí)現(xiàn)界面跳轉(zhuǎn)功能
wxpython沒提供界面跳轉(zhuǎn)的方式,所以就需要借助threading模塊,本文給大家分享python wxpython 實(shí)現(xiàn)界面跳轉(zhuǎn)功能,感興趣的朋友跟隨小編一起看看吧2019-12-12

