迴歸分析---線性迴歸原理和Python實現

本文主要運用Python進行簡單的線性迴歸,首先是介紹了線性迴歸的基本理論,而後是運用一些網絡爬蟲數據進行迴歸分析。
  • 1
  • 2

1、線性迴歸的理論

1)線性迴歸的基本概念

線性迴歸是一種有監督的學習算法,它介紹的自變量的和因變量的之間的線性的相關關係,分爲一元線性迴歸和多元的線性迴歸。一元線性迴歸是一個自變量和一個因變量間的迴歸,能夠當作是多遠線性迴歸的特例。線性迴歸能夠用來預測和分類,從迴歸方程能夠看出自變量和因變量的相互影響關係。 
線性迴歸模型以下:html

這裏寫圖片描述

對於線性迴歸的模型假定以下: 
(1) 偏差項的均值爲0,且偏差項與解釋變量之間線性無關算法

這裏寫圖片描述

(2) 偏差項是獨立同分布的,即每一個偏差項之間相互獨立且每一個偏差項的方差是相等的。 
(3) 解釋變量之間線性無關 
(4) 正態性假設,即偏差項是服從正態分佈的 
以上的假設是創建迴歸模型的基本條件,因此對於迴歸結果要進行一一驗證,若是不知足假定,就要進行相關的修正。api

2) 模型的參數求解

(1)矩估計 
通常是經過樣本矩來估計整體的參數,常見是樣本的一階原點矩來估計整體的均值,二階中心矩來估計整體的方差。 
(2)最小二乘估計 
通常最小二乘估計是適用於因變量是連續型的變量,最經常使用的是普通最小二乘法( Ordinary Least Square,OLS),它的原理是所選擇的迴歸模型應該使全部觀察值的殘差平方和達到最小。預測值用 表示,對應的實際值 ,殘差平方和 ,最小二乘估計是求得參數的值,使得L最小。對於線性迴歸求得的參數值是惟一的。 
(3)極大似然估計 
極大似然估計是基於機率的思想,它要求樣本的機率分佈是已知的,參數估計的值是使得大量樣本發生的機率最大,用似然函數來度量,似然函數是各個樣本的密度函數的乘積,爲方便求解對其求對數,加負號求解極小值,獲得參數的估計結果。網絡

3)模型的優缺點

優勢:結果易於理解,計算上不復雜 
缺點:對於非線性的數據擬合很差函數

2、用Python實現線性迴歸的小例子

數據來源於網絡爬蟲,武漢市商品房價格爲因變量和幾個相關關鍵詞的百度指數的搜索量爲自變量。 
因爲本文的自變量有98個,首先進行自變量的選擇,先是經過相關係數矩陣篩選掉不相關的變量,根據Pearson相關係數矩陣進行變量的選取,通常選取相關係數的值大於0.3的變量進行迴歸分析,因爲本文的變量較多,先進行手動篩選而後利用相關係數進行選取,本文選取相關係數大於0.55的變量進行迴歸分析。學習

通過相關係數的分析選取8個變量進行下一步的分析,分析的Python代碼以下:ui

# -*- coding: utf-8 -*-
#### Required Packages
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
import statsmodels.api as sm
data = pd.read_csv('Hdata.csv')
print data
dataset = np.array(data)
######相關性分析
X = dataset[:,1:98]
y = dataset[:,0]
cor = np.corrcoef(dataset,rowvar=0)[:,0]
######輸出相關矩陣的第一列
print cor
#######篩選後的數據讀取
data1 = pd.read_csv('H1data.csv')
dataset1 = np.array(data)
######篩選後的變量######
X1 = dataset1[:,1:8]
Y1 = dataset1[:,0]
est = sm.OLS(Y1,X1).fit()
print est.summary()
  • 貼出線性迴歸的結果以下:
OLS RegressionResults                           
=======================================================================
Dep. Variable:                      y   R-squared:                       0.978
Model:                            OLS   Adj. R-squared:                  0.974
Method:                 Least Squares  F-statistic:                    287.5
Date:                Sat, 08 Apr 2017   Prob (F-statistic):           9.35e-36
Time:                        15:15:14   Log-Likelihood:                -442.82
No. Observations:                  53   AIC:                             899.6
Df Residuals:                      46   BIC:                             913.4
Df Model:                           7                                        
Covariance Type:            nonrobust                                         
=======================================================================
                 coef    std err          t     P>|t|      [95.0% Conf. Int.]
-----------------------------------------------------------------------
x1            -0.3691      0.494    -0.747      0.0459        -1.364     0.626
x2             0.3249      0.353     0.920      0.0362        -0.386     1.036
x3             1.0987      0.837     1.312      0.0196        -0.587     2.784
x4             0.7613      0.790     0.964      0.0340        -0.829     2.351
x5            -1.5766      1.099    -1.435      0.0158        -3.789     0.636
x6            -0.1572      1.077    -0.146      0.0885        -2.325     2.011
x7             3.2003      1.603     1.997      0.052        -0.026     6.427
=======================================================================
Omnibus:                        0.413   Durbin-Watson:                   1.748
Prob(Omnibus):                  0.814   Jarque-Bera (JB):                0.100
Skew:                           0.097   Prob(JB):                        0.951
Kurtosis:                       3.089   Cond. No.                         95.5
=======================================================================

從迴歸分析的結果能夠看出來,模型的擬合優度R-squared=0.978,說明模型的擬合效果很好,據其大小對擬合效果的優劣性進行斷定。對模型總體的顯著性能夠經過F統計量來看,結果顯示的F統計量對應的P值顯著小於0.05(0.05是顯著性水平,也能夠選取0.01),說明模型總體是顯著的,它的顯著性說明被解釋變量能不能由這些解釋變量進行解釋,F檢驗是對總體的檢驗,F檢驗的經過不表明每個解釋變量是顯著的。對每個變量的顯著性要看t檢驗統計量的值,t檢驗統計量對應的P值小於0.05(0.01或者0.1也行,具體看狀況分析,通常選取0.05)視爲是顯著的,從結果能夠看出,X6和X7的變量的p是大於0.05的,也就是這兩個變量對被解釋變量的影響是不顯著的要剔除。可是若是你只是關心預測的問題那麼能夠不剔除。可是若是有研究解釋變量對被解釋變量的影響的程度的,要作進一步的研究。接下來看DW的值,DW的值爲1.748,說明模型不存在自相關性。看JB檢驗統計量的值,JB檢驗統計量是對正態性的假設進行檢驗的,JB的值對應的p值爲0.951顯著大於0.05,能夠認爲模型知足正態性的假設的。對於參數的實際意義本文就不作解釋了。 
對於DW值判斷相關性的依據以下: 
 DW=0時,殘差序列存在徹底正自相關, 
  DW=(0,2)時,殘差序列存在正自相關, 
  DW=2時,殘差序列無自相關, 
  DW=(2,4)時,殘差序列存在負自相關, 
  DW=4時,殘差序列存在徹底負自相關。 
對於創建模型的通常步驟簡單描述以下: 
(1) 根據數據的表現形式選取合適的模型 
(2) 對選取的模型選取適用的參數估計方法 
(3) 對參數的結果進行檢驗 
(4) 對結果進行解釋spa

參考

相關分析 
https://sanwen8.cn/p/3cbCi2d.htmlcode

相關文章
相關標籤/搜索