建立完回歸模型后,還需要驗(yàn)證咱們建立的模型是否合適,換句話說(shuō),就是咱們建立的模型是否真的能代表現(xiàn)有的因變量與自變量關(guān)系,這個(gè)驗(yàn)證標(biāo)準(zhǔn)一般就選用擬合優(yōu)度。
成都創(chuàng)新互聯(lián)公司基于成都重慶香港及美國(guó)等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動(dòng)大帶寬,多線BGP大帶寬租用,是為眾多客戶(hù)提供專(zhuān)業(yè)服務(wù)器托管報(bào)價(jià),主機(jī)托管價(jià)格性?xún)r(jià)比高,為金融證券行業(yè)眉山聯(lián)通機(jī)房,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專(zhuān)業(yè)成都idc公司。擬合優(yōu)度是指回歸方程對(duì)觀測(cè)值的擬合程度。度量擬合優(yōu)度的統(tǒng)計(jì)量是判定系數(shù)R^2。R^2的取值范圍是[0,1]。R^2的值越接近1,說(shuō)明回歸方程對(duì)觀測(cè)值的擬合程度越好;反之,R^2的值越接近0,說(shuō)明回歸方程對(duì)觀測(cè)值的擬合程度越差。
擬合優(yōu)度問(wèn)題目前還沒(méi)有找到統(tǒng)一的標(biāo)準(zhǔn)說(shuō)大于多少就代表模型準(zhǔn)確,一般默認(rèn)大于0.8即可
擬合優(yōu)度的公式:R^2 = 1 - RSS/TSS
注: RSS 離差平方和 ; TSS 總體平方和
理解擬合優(yōu)度的公式前,需要先了解清楚幾個(gè)概念:總體平方和、離差平方和、回歸平方和。
一、總體平方和、離差平方和、回歸平方和
回歸平方和 ESS,殘差平方和 RSS,總體平方和 TSS
TSS(Total Sum of Squares)表示實(shí)際值與期望值的離差平方和,代表變量的總變動(dòng)程度
ESS(Explained Sum of Squares)表示預(yù)測(cè)值與期望值的離差平方和,代表預(yù)測(cè)模型擁有的變量變動(dòng)程度
RSS(Residual Sum of Squares)表示實(shí)際值與預(yù)測(cè)值的離差平方和,代表變量的未知變動(dòng)程度
各個(gè)平方和的計(jì)算公式如下:
二、擬合優(yōu)度
接上一節(jié)內(nèi)容可知,我們拿實(shí)際值與期望值的離差平方和作為整體變量的總變動(dòng)程度,這個(gè)變動(dòng)程度就是我們建模型的目的,我們建立模型就是為了模擬這個(gè)變動(dòng)程度。
建立模型后,整體變量的總變動(dòng)程度(TSS)可以劃分為兩部分:模型模擬的變動(dòng)程度(ESS)和未知的變動(dòng)程度(RSS)
通常來(lái)說(shuō),預(yù)測(cè)模型擁有的變量變動(dòng)程度在總變動(dòng)程度中的占比越高,代表模型越準(zhǔn)確,當(dāng)RSS=0時(shí),表示模型能完全模擬變量的總變動(dòng)。
回到文章開(kāi)頭的擬合優(yōu)度公式:R^2 = 1 - RSS/TSS 。是不是很好理解了!
假設(shè)R^2 = 0.8,意味著咱們建立的模型擁有的變動(dòng)程度能模擬80%的總變動(dòng)程度,剩下20%為未知變動(dòng)。
三、例子
對(duì)于學(xué)生而言,現(xiàn)在要探索一下學(xué)生的學(xué)習(xí)成績(jī)與單一的學(xué)習(xí)時(shí)間是否有關(guān)系,給出兩組數(shù)據(jù)如下:
'學(xué)習(xí)時(shí)間':[0.50,0.75,1.00,1.25,1.50,1.75,1.75, 2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50],
'分?jǐn)?shù)':[10,22,13,43,20,22,33,50,62,48,55,75,62,73,81,76,64,82,90,93]
常識(shí)理解,學(xué)習(xí)時(shí)間越長(zhǎng),分?jǐn)?shù)一般都會(huì)越高,兩者是正比關(guān)系,因?yàn)榫鸵粋€(gè)自變量,直接用sklearn,算出截距和斜率即可
import pandas as pd import numpy as np import matplotlib.pyplot as plt from pandas import DataFrame,Series from sklearn.cross_validation import train_test_split from sklearn.linear_model import LinearRegression #創(chuàng)建數(shù)據(jù)集 examDict = {'學(xué)習(xí)時(shí)間':[0.50,0.75,1.00,1.25,1.50,1.75,1.75, 2.00,2.25,2.50,2.75,3.00,3.25,3.50,4.00,4.25,4.50,4.75,5.00,5.50], '分?jǐn)?shù)':[10,22,13,43,20,22,33,50,62, 48,55,75,62,73,81,76,64,82,90,93]} #轉(zhuǎn)換為DataFrame的數(shù)據(jù)格式 examDf = DataFrame(examDict) #examDf #繪制散點(diǎn)圖 plt.scatter(examDf.分?jǐn)?shù),examDf.學(xué)習(xí)時(shí)間,color = 'b',label = "Exam Data") #添加圖的標(biāo)簽(x軸,y軸) plt.xlabel("Hours") plt.ylabel("Score") #顯示圖像 plt.show() #將原數(shù)據(jù)集拆分訓(xùn)練集和測(cè)試集 exam_X = examDf.學(xué)習(xí)時(shí)間 exam_Y = examDf.分?jǐn)?shù) X_train,X_test,Y_train,Y_test = train_test_split(exam_X,exam_Y,train_size=0.8) #X_train為訓(xùn)練數(shù)據(jù)標(biāo)簽,X_test為測(cè)試數(shù)據(jù)標(biāo)簽,exam_X為樣本特征,exam_y為樣本標(biāo)簽,train_size 訓(xùn)練數(shù)據(jù)占比 print("原始數(shù)據(jù)特征:",exam_X.shape, ",訓(xùn)練數(shù)據(jù)特征:",X_train.shape, ",測(cè)試數(shù)據(jù)特征:",X_test.shape) print("原始數(shù)據(jù)標(biāo)簽:",exam_Y.shape, ",訓(xùn)練數(shù)據(jù)標(biāo)簽:",Y_train.shape, ",測(cè)試數(shù)據(jù)標(biāo)簽:",Y_test.shape) model = LinearRegression() #對(duì)于模型錯(cuò)誤我們需要把我們的訓(xùn)練集進(jìn)行reshape操作來(lái)達(dá)到函數(shù)所需要的要求 # model.fit(X_train,Y_train) #reshape如果行數(shù)=-1的話可以使我們的數(shù)組所改的列數(shù)自動(dòng)按照數(shù)組的大小形成新的數(shù)組 #因?yàn)閙odel需要二維的數(shù)組來(lái)進(jìn)行擬合但是這里只有一個(gè)特征所以需要reshape來(lái)轉(zhuǎn)換為二維數(shù)組 X_train = X_train.values.reshape(-1,1) X_test = X_test.values.reshape(-1,1) model.fit(X_train,Y_train) a = model.intercept_#截距 b = model.coef_#回歸系數(shù) print("最佳擬合線:截距",a,",回歸系數(shù):",b)
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性?xún)r(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專(zhuān)為企業(yè)上云打造定制,能夠滿足用戶(hù)豐富、多元化的應(yīng)用場(chǎng)景需求。