t值 線性回歸專題及常見問題 - CSDN

2021-01-09 CSDN技術社區

線性回歸
用線性回歸找到最佳擬合直線

回歸的目的是預測數值型數據,根據輸入寫出一個目標值的計算公式,這個公式就是回歸方程(regression equation),變量前的係數(比如一元一次方程)稱為回歸係數(regression weights)。求這些回歸係數的過程就是回歸。

假設輸入數據存放在矩陣X 中,回歸係數存放在向量w 中,那麼對於數據X 1  的預測結果可以用Y 1 =X T 1 w 得出。我們需要找到使誤差最小的w ,但是如果使用誤差之間的累加的話,那么正負誤差將會抵消,起不到效果,所以採用平方誤差。如下:

∑ i=1 n (y i −x T i w) 2  

用矩陣表示:(Y−Xw) T (Y−Xw) 。對W 求導得到X T (Y−Xw) ,令其等於零得到w 的最佳估計:

w ^ =(X T X) −1 X T y 

首先我們導入數據,代碼如下:

from numpy import *def loadDataSet(fileName): numFeat = len(open(fileName).readline().split('\t'))-1 dataMat = []; labelMat = [] fr = open(fileName) for line in fr.readlines(): lineArr = [] curLine = line.strip().split('\t') for i in range(numFeat): lineArr.append(float(curLine[i])) dataMat.append(lineArr) labelMat.append(float(curLine[-1])) return dataMat, labelMat

這部分數據是由tap分隔,並且最後一個值是目標值。接下來計算回歸係數:

def standRegres(xArr, yArr): xMat = mat(xArr); yMat = mat(yArr).T xTx = xMat.T*xMat if linalg.det(xTx) == 0.0: print "This matrix is singular, cannot do inverse" return ws = xTx.I * (xMat.T*yMat) return ws

該函數首先讀入x 和y 數組,然後將它們轉換成矩陣,之後根據公式計算平方誤差,注意,需要對X T X 求逆,此時需要判斷它的行列式是否為0,行列式等於0的矩陣無法求逆,可以直接使用linalg.det() 來計算行列式。好了,我們來看看效果,首先讀入數據:

xArr,yArr=loadDataSet('ex0.txt')

我們先看看前兩條數據:

print xArr[0:2][[1.0, 0.067732], [1.0, 0.42781]]

第一個值總是等於1.0,也就是x 0  ,假定偏移量是一個常數,第二個值是x 1  。
現在看看計算回歸係數函數效果:

ws = standRegres(xArr,yArr) print ws[[ 3.00774324] [ 1.69532264]]

現在得到了回歸係數,那麼我們可以通過回歸方程進行預測yHat:

xMat = mat(xArr)yMat = mat(yArr)yHat = xMat*ws

為方便觀察,我們畫出數據集散點圖:

import matplotlib.pyplot as pltfig = plt.figure()ax = fig.add_subplot(111)ax.scatter(xMat[:,1].flatten().A[0], yMat.T[:,0].flatten().A[0])

現在繪製最佳擬合直線,那麼需要畫出預測值yHat,如果直線上數據點次序混亂,繪圖時將會出現問題,所以要將點按照升序排序:

xCopy = xMat.copy()xCopy.sort(0)yHat=xCopy*wsax.plot(xCopy[:,1], yHat)plt.show()

我們來看看效果:

最佳擬合直線方法將數據視為直線進行建模,但圖中的數據集似乎還有更好的擬合方式。

局部加權線性回歸

線性回歸可能出現欠擬合的現象,如上圖所示,因為它求的是具有最小均方誤差的無偏差估計。所以有些方法允許在估計中引入一些偏差,從而降低預測的均方誤差。其中一個方法就是使用局部加權線性回歸(Locally Weighted Linear Regression,LWLR),我們給待測點附近的每個點賦予一定的權重,是用此方法解出的回歸係數如下:

w ^ =(X T WX) −1 X T Wy 

其中W 是一個矩陣,用來給每個數據點賦予權重。

LWLR使用「核」來對附近的點賦予更高的權重,核的類型可以自由選擇,最常用的核就是高斯核,高斯核對應的權重如下:

w(i,i)=exp(|x i −x|−2k 2  ) 

下面來編寫局部加權線性回歸:

def lwlr(testPoint, xArr, yArr, k = 1.0): xMat = mat(xArr); yMat = mat(yArr).T m = shape(xMat)[0] weights = mat(eye((m))) for j in range(m): diffMat = testPoint - xMat[j,:] weights[j,j] = exp(diffMat*diffMat.T/(-2.0*k**2)) xTx = xMat.T * (weights * xMat) if linalg.det(xTx) == 0: print "This matrix is singular, cannot do inverse" return ws = xTx.I * (xMat.T * (weights * yMat)) return testPoint * wsdef lwlrTest(testArr, xArr, yArr, k=1.0): m = shape(testArr)[0] yHat = zeros(m) for i in range(m): yHat[i] = lwlr(testArr[i],xArr,yArr,k) return yHat

lwlr()函數得到的是單點的估計,為得到所有點的估計,可以調用lwlrTest()函數。

yHat = lwlrTest(xArr,xArr,yArr,1.0)

下面繪出估計值和原始值,看看yHat的擬合效果。需要將數據點按序排列。

xMat = mat(xArr)srtInd = xMat[:,1].argsort(0)xSort = xMat[srtInd][:,0,:]

然後使用Matplotlib繪圖:

fig = plt.figure() ax = fig.add_subplot(111) ax.plot(xSort[:,1],yHat[srtInd]) ax.scatter(xMat[:,1].flatten().A[0], mat(yArr).T.flatten().A[0], s = 2, c = 'red') plt.show()

當k=1.0時,權重很大,相當於將所有數據視為等權重,得出的最佳擬合直線與標準線性回歸一致:

當使用k=0.01時:

yHat = lwlrTest(xArr,xArr,yArr,0.01)

結果如下:

當使用k=0.003時:

yHat = lwlrTest(xArr,xArr,yArr,0.003)

結果如下:

由上三種結果可以看出,在k=1.0時,得出的擬合曲線欠擬合,k=0.01時,曲線擬合效果不錯,而k=0.003時,又有些過擬合。

相關焦點

  • 的方法 線性回歸方程檢驗專題及常見問題 - CSDN
    回歸方程建立及回歸參數的區間估計,但是它們都是建立在假定因變量和自變量線性相關的基礎上。在總變差中,一部分變差可以用設定的回歸方程解釋,稱之為回歸變差;另一部分變差是回歸方程不能解釋的,稱為剩餘變差,它們之間有下面等式:如果在總變差Y中,回歸變差所佔的比例越大,則說明Y值隨X值的變化越顯著,或者說X解釋Y的能力越強。反之,回歸變差在總變差中所佔比例越小,則說明Y值隨X值的變化越不顯著,或者說X解釋Y的能力越差。
  • spss 方法 線性回歸專題及常見問題 - CSDN
    二.解析在進行影響失能老年人照護需求的單因素分析時,根據資料情況選擇t檢驗、方差分析或秩和檢驗。以照護需求得分為因變量,以可能為影響失能老年人照護需求得分的因素為自變量,採用多元線性回歸篩選出影響失能老年人選擇照護服務需求的因素。本例納入的自變量有年齡、經濟來源、健康自評、失能程度、慢性病患病種類、慢性疼痛、跌倒經歷,賦值方式如表1:
  • eviews線性回歸模型專題及常見問題 - CSDN
    分享經典書籍: A Modern Approach to Regression with R.pdf  連結: https://pan.baidu.com/s/14NJt7CrOpUUe2hYyrJn_rg  提取碼: 7fv6  多元線性回歸
  • spss多元線性回歸模型專題及常見問題 - CSDN
    多元線性回歸,主要是研究一個因變量與多個自變量之間的相關關係,跟一元回歸原理差不多,區別在於影響因素(自變量)更多些而已,例如:一元線性回歸方程 為:2:無偏性假設,即指:期望值為03:同共方差性假設,即指,所有的  隨機誤差變量方差都相等4:獨立性假設,即指:所有的隨機誤差變量都相互獨立,可以用協方差解釋。   今天跟大家一起討論一下,SPSS---多元線性回歸的具體操作過程,下面以教程教程數據為例,分析汽車特徵與汽車銷售量之間的關係。
  • r語言一元回歸模型專題及常見問題 - CSDN
    一元線性回歸介紹回歸分析(Regression Analysis)是用來確定2個或2個以上變量間關係的一種統計分析方法。如果回歸分析中,只包括一個自變量X和一個因變量Y時,且它們的關係是線性的,那麼這種回歸分析稱為一元線性回歸分析。回歸分析屬於統計學的基本模型,涉及統計學基礎,就會有一大堆的名詞和知識點需要介紹。
  • 線性回歸假設檢驗 - CSDN
    中)但是並非全都是線性回歸>>> get_lr_stats(x1_in, y1_in, lrg1)一元線性回歸方程為: y=3.000090909090906 + 0.5000909090909094*x相關係數(R^2): 0.6665424595087752;回歸分析(SSR): 27.51000090909094
  • eviews 線性回歸模型 - CSDN
    分享經典書籍: A Modern Approach to Regression with R.pdf  連結: https://pan.baidu.com/s/14NJt7CrOpUUe2hYyrJn_rg  提取碼: 7fv6  多元線性回歸
  • t值判斷顯著性專題及常見問題 - CSDN
    提出問題  顯著性值p是一個很常見的事。比如我們在對比兩組或者是多組數據時,對於兩組而言,會做Two Sample T Test,然後給出一個p值,判斷兩者差異的顯著性。在ggplot2中,兩組數據對比時,我們常用的,就是boxplot,那麼,如何在作出兩組或者多組的boxplot的同時,標記出顯著性的數據呢?
  • 對抗學習專題及常見問題 - CSDN
    * Ensemble Adversarial Training: Attacks and Defenses(防禦for梯度隱藏)【之前的對抗學習實際是得到退化的局部最小值,隱馬爾可夫:通過顯序列算隱序列generalization ability 泛化:不要過擬合神經網絡:非線性積累NP完全問題
  • spss線性回歸 回歸方程 - CSDN
    ,用到的分析方法就是線性回歸,決定猛學習一下,再來評判視頻裡的結論。>線性回歸,首先應用於定距變量之間,本質上是分析一個因變量和一組自變量之間的相關關係,既可以解釋,也可以做預測。就是一個用線性回歸解釋相關性的問題。
  • python 預測股票專題及常見問題 - CSDN
    基於VAR算法的預測向量自回歸(VAR)模型就是非結構化的多方程模型,它的核心思想不考慮經濟理論,而直接考慮經濟變量時間時序之間的關係,避開了結構建模方法中需要對系統中每個內生變量關於所有內生變量滯後值函數建模的問題
  • 線性回歸分析詳解10(完結篇):線性回歸分析預測的十大步驟
    許栩原創專欄《從入門到高手:線性回歸分析詳解》第10章,這是本專欄的最後一章,是專欄的完結篇:用線性回歸分析做預測,多元線性回歸分析預測的十大步驟。六、求解多元線性回歸方程。經過以上步驟,按回歸火鍋店的數據,最終選擇兩個自變量,氣溫和促銷折扣,我們列出多元線性回歸方程:y=a1x1+a2x2+b。接下來,就是進行多元線性回歸方程的求解。(求解多元回歸方程詳見本專欄第5章。)
  • python卡方分析專題及常見問題 - CSDN
    推論統計分析2.1 問題是什麼?問題是: 樣本數據是否滿足總體排放值要求?2)計算t值t=(樣本平均值-總體平均值)/標準誤差 3)根據t值,自由度計算出概率p值即 在 t=-3.00164952589,DF=9時,p=0.0149(如圖所示雙尾) ,故本次左尾檢驗P=0.007452.2.2用python統計包scipy計算使用統計包
  • 線性回歸方程的顯著性驗證,總體驗證的F檢驗與個體驗證的t檢驗
    許栩原創專欄《從入門到高手:線性回歸分析詳解》第8章,顯著性驗證,總體驗證的F檢驗與個體驗證的t檢驗。上一章,我講述了回歸方程的精度,在回歸分析中,我們求出回歸方程後,除了確認回歸方程的精度外,我們要需要對回歸方程進行顯著性驗證,以確認回歸方程的有效性。本章,我同樣分如下三個小節對顯著性驗證進行講解,歡迎閱讀與探討。我的《線性回歸分析》專欄總目錄見下圖。1、什麼是顯著性驗證?
  • 原理+代碼|Python實戰多元線性回歸模型
    文章來源: 早起Python作者:蘿蔔前言「多元線性回歸模型」非常常見,是大多數人入門機器學習的第一個案例,儘管如此,裡面還是有許多值得學習和注意的地方。其中多元共線性這個問題將貫穿所有的機器學習模型,所以本文會「將原理知識穿插於代碼段中」,爭取以不一樣的視角來敘述和講解「如何更好的構建和優化多元線性回歸模型」。
  • android 監聽屏幕鎖屏專題及常見問題 - CSDN
    > 鎖屏聽音樂(音頻),沒有鎖屏看視頻Android系統亮屏、鎖屏、屏幕解鎖事件(解決部分手機亮屏後未解鎖即進入resume狀態)- http://blog.csdn.net/oracleot/article/details/20378453Android 實現鎖屏的較完美方案- https://segmentfault.com/a/1190000003075989
  • 基於R軟體實現多元線性回歸
    其基本思想是確定一個方程,給出一組預測變量(X)和一個響應變量(Y)之間的線性關係:式中β1-βn代表了預測變量X1-Xn的回歸係數(斜率),β0是線性方程的截距。回歸的目的是找到一組最優的模型參數(斜率和截距值的組合),使響應變量的觀測值和預測值之間的殘差平方和最小化。
  • arduino定位專題及常見問題 - CSDN
    姿態解算代碼#include "Wire.h"#include "I2Cdev.h"unsigned long now, lastTime = 0;float dt; //微分時間int16_t
  • 回歸系列(四)|一個完整的線性回歸是怎樣做的
    作者:丁點helper 來源:丁點幫你前面的文章主要介紹了回歸的一些關鍵詞,比如回歸係數、樣本和總體回歸方程、預測值和殘差等,今天我們結合一個案例來看看如何做完整的回歸分析,準確而言,是多重線性回歸(Multiple Linear Regreesion)。
  • Python數據分析|線性回歸
    Python數據分析學習筆記,今天分享下利用Python對業務進行數據預處理,並利用線性回歸進行數據預測。③接下來需要進行數據缺失值處理:調用info函數,查看各列的數據,可以看到各列的數據還是有不一致的情況,需要做進一步的處理。④先以我們後續需要用來做線性回歸的列「內容閱讀量」為標準,將不含該值的數據行去除:調用dropna函數,並執行info函數看數據情況。