国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

統(tǒng)計(jì)分析——回歸分析

這篇具有很好參考價(jià)值的文章主要介紹了統(tǒng)計(jì)分析——回歸分析。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

概念

在統(tǒng)計(jì)學(xué)中,回歸分析(regression analysis)指的是確定兩種或兩種以上變量間相互依賴的定量關(guān)系的一種統(tǒng)計(jì)分析方法?;貧w分析按照涉及的變量的多少,分為一元回歸和多元回歸分析;按照因變量的多少,可分為簡單回歸分析和多重回歸分析;按照自變量和因變量之間的關(guān)系類型,可分為線性回歸分析和非線性回歸分析。

在大數(shù)據(jù)分析中,回歸分析是一種預(yù)測性的建模技術(shù),它研究的是因變量(目標(biāo))和自變量(預(yù)測器)之間的關(guān)系。這種技術(shù)通常用于預(yù)測分析,時(shí)間序列模型以及發(fā)現(xiàn)變量之間的因果關(guān)系。

統(tǒng)計(jì)分析——回歸分析

回歸分析的步驟

  1. 確定回歸方程的解釋變量和被解釋變量。
  2. 確定回歸模型,建立回歸方程。
  3. 對回歸方程進(jìn)行各種驗(yàn)證。
  4. 利用回歸方程進(jìn)行預(yù)測。

一元線性回歸

一元線性回歸模型

如果只有一個(gè)自變量X,而且因變量Y和自變量X之間的數(shù)量變化關(guān)系呈近似線性關(guān)系,就可以建立一元線性回歸方程,由自變量X的值來預(yù)測因變量Y的值,這就是一元線性回歸預(yù)測。

如果因變量Y和自變量X之間呈線性相關(guān),那就是說,對于自變量X的某一值 xi ,因變量Y對應(yīng)的取值 yi 不是唯一確定的,而是有很多的可能取值,它們分布在一條直線的上下,這是因?yàn)閅還受除自變量以外的其他因素的影響。這些因素的影響大小和方向都是不確定的,通常用一個(gè)隨機(jī)變量(記為ε)來表示,也稱為隨機(jī)擾動(dòng)項(xiàng)。于是,Y和X之間的依存關(guān)系可表示為:
統(tǒng)計(jì)分析——回歸分析
α —— 截距
β —— 斜率
ε —— 誤差項(xiàng),反映除x和y的線性關(guān)系之外的隨機(jī)因素對y的影響

一元線性回歸方程

描述因變量y的期望值如何依賴于自變量x的方程稱為回歸方程:
統(tǒng)計(jì)分析——回歸分析

  • 如果回歸方程的參數(shù)已知,對于一個(gè)給定的x值,利用回歸方程就能計(jì)算出y的期望值。
  • 用樣本統(tǒng)計(jì)量代替回歸方程中的位置參數(shù),就得到估計(jì)回歸方程,簡稱回歸直線。

參數(shù)的最小二乘法估計(jì)

對于回歸直線,關(guān)鍵在于求解參數(shù),常用高斯提出的最小二乘法,它是使因變量的觀察值y與估計(jì)值之間的離差平方和達(dá)到最小來求解。
統(tǒng)計(jì)分析——回歸分析
展開可得:
統(tǒng)計(jì)分析——回歸分析
我們求Q的極小值點(diǎn),對其求偏導(dǎo)(β0和β1):
統(tǒng)計(jì)分析——回歸分析
求解得:
統(tǒng)計(jì)分析——回歸分析

利用回歸直線進(jìn)行估計(jì)和預(yù)測

  • 點(diǎn)估計(jì):利用估計(jì)的回歸方程,對于x的某一個(gè)特定得值,求出y得一個(gè)估計(jì)值。
  • 區(qū)間估計(jì):利用估計(jì)得回歸方程,對于x的一個(gè)特定值,求出y的一個(gè)估計(jì)值的區(qū)間。

估計(jì)標(biāo)準(zhǔn)誤差的計(jì)算

為了度量回歸方程的可靠性,通常計(jì)算估計(jì)的標(biāo)準(zhǔn)誤差。它度量觀察值回繞著回歸直線的變化程度或分散程度。
估計(jì)平均誤差:
統(tǒng)計(jì)分析——回歸分析

  • 自由度為:n-2(由兩個(gè)不能改變參數(shù))。
  • 估計(jì)標(biāo)準(zhǔn)誤差越大,則數(shù)據(jù)點(diǎn)圍繞回歸直線的分散程度越大,回歸方程大的代表性越小。
  • 估計(jì)標(biāo)準(zhǔn)誤差越小,則數(shù)據(jù)點(diǎn)圍繞回歸直線的分散程度越小,回歸方程大的代表性越大,即可靠性高。

置信區(qū)間估計(jì)

統(tǒng)計(jì)分析——回歸分析

在1 — α置信水平下預(yù)測區(qū)間

統(tǒng)計(jì)分析——回歸分析

影響區(qū)間寬度的因素

  • 置信水平(1 - α), 區(qū)間寬度隨置信水平的增大而增大。
  • 數(shù)據(jù)的離散程度Se,區(qū)間寬度隨離散程度的增大而增大。
  • 樣本容量,區(qū)間寬度隨樣本容量的增大而減小。
  • X0與X均值之間的差異,隨差異程度的增大而增大。

統(tǒng)計(jì)分析——回歸分析

回歸直線的擬合優(yōu)度

回歸直線與各觀測點(diǎn)的接近程度稱為回歸直線對數(shù)據(jù)的擬合優(yōu)度。

  • 總平方和(SST):
    統(tǒng)計(jì)分析——回歸分析

  • 回歸平方和(SSR):
    統(tǒng)計(jì)分析——回歸分析

  • 殘差平方和(SSE):
    統(tǒng)計(jì)分析——回歸分析

總平方和可以分解為回歸平方和、殘差平方和兩部分:SST=SSR+SSE

  • SST反映因變量的n個(gè)觀察值與其均值的總離差。
  • SSR反映了y的總變差中,由于x與y的線性關(guān)系引起的y的變化部分。
  • SSE反映了除了x對y的線性影響之外的其他因素對y變差的作用,是不能由回歸直線來解釋的y的變差部分。

判定系數(shù)

回歸平方和占總平方的比例,用R^2表示,其值在0到1之間。

  • R^2 == 0:說明y的變化與x無關(guān),x完全無助于解釋y的變差
  • R^2 == 1:說明殘差平方和為0,擬合是完全的,y的變化只與x有關(guān)(理想情況下)
    統(tǒng)計(jì)分析——回歸分析

顯著性檢驗(yàn)

顯著性檢驗(yàn)的主要目的是根據(jù)所建立的估計(jì)方程用自變量x來估計(jì)或預(yù)測因變量y的取值。當(dāng)建立了估計(jì)方程后,還不能馬上進(jìn)行估計(jì)或預(yù)測,因?yàn)樵摴烙?jì)方程是根據(jù)樣本數(shù)據(jù)得到的,它是否真實(shí)的反映了變量x和y之間的關(guān)系,需要通過檢驗(yàn)后才能證實(shí)。

根據(jù)樣本數(shù)據(jù)擬合回歸方程時(shí),實(shí)際上就已經(jīng)假定變量x與y之間存在著線性關(guān)系,并假定誤差項(xiàng)是一個(gè)服從正態(tài)分布的隨機(jī)變量,且具有相同的方差。但這些假設(shè)是否成立需要檢驗(yàn),顯著性檢驗(yàn)包括兩方面:

  • 線性關(guān)系檢驗(yàn)
  • 回歸系數(shù)檢驗(yàn)

線性關(guān)系檢驗(yàn)

線性關(guān)系檢驗(yàn)是檢驗(yàn)自變量x和因變量y之間的線性關(guān)系是否顯著或者說,它們之間能否用一個(gè)線性模型來表示。
講均方回歸(MSR)同均方殘差(MSE)加以比較,應(yīng)用F檢驗(yàn)來分析二者之間的差別是否顯著。

  • 均方回歸:回歸平方和SSR除以相應(yīng)的自由度(自變量個(gè)數(shù)K)
  • 均方殘差:殘差平方和SSE除以相應(yīng)的自由度(n-k-1)

H0:β1=0所有回歸系數(shù)與0無顯著差異,y與全體x的線性關(guān)系不顯著。

計(jì)算檢驗(yàn)統(tǒng)計(jì)量F:
統(tǒng)計(jì)分析——回歸分析

回歸系數(shù)檢驗(yàn)

回歸系數(shù)顯著性檢驗(yàn)的目的是通過檢驗(yàn)回歸系數(shù)β的值與0是否有顯著性差異,來判斷Y與X之間是否有顯著性線性關(guān)系。若β=0,則總體回歸方程中不含X項(xiàng)(即Y不隨X變動(dòng)而變動(dòng)),因此變量Y與X之間不存在線性關(guān)系;若β≠0,說明變量Y與X之間存在顯著的線性關(guān)系。
統(tǒng)計(jì)分析——回歸分析
計(jì)算檢驗(yàn)的統(tǒng)計(jì)量:
統(tǒng)計(jì)分析——回歸分析

兩個(gè)檢驗(yàn)的區(qū)別

線性關(guān)系的檢驗(yàn)是檢驗(yàn)自變量與因變量是否可以用線性來表達(dá),而回歸系數(shù)的檢驗(yàn)是對樣本數(shù)據(jù)計(jì)算的回歸系數(shù)檢驗(yàn)總體中回歸系數(shù)是否為0。

  • 在一元線性回歸中,自變量只有一個(gè),線性關(guān)系檢驗(yàn)與回歸系數(shù)檢驗(yàn)是等價(jià)的。
  • 多元回歸分析中,這兩種檢驗(yàn)的意義是不同的。線性關(guān)系檢驗(yàn)只能用來檢驗(yàn)總體回歸關(guān)系的顯著性,而回歸系數(shù)檢驗(yàn)可以對各個(gè)回歸系數(shù)分別進(jìn)行檢驗(yàn)。

多元線性回歸

經(jīng)常遇到某一現(xiàn)象的發(fā)展變化取決于幾個(gè)影響因素的情況,也就是一個(gè)因變量和幾個(gè)自變量有依存關(guān)系的情況,這時(shí)需用多元線性回歸分析。

  • 多元線性回歸分析預(yù)測法,是指通過對兩及其以上的自變量與一個(gè)因變量的相關(guān)性分析,建立預(yù)測模型進(jìn)行預(yù)測和控制的方法。

多元線性回歸預(yù)測模型一般式為:
統(tǒng)計(jì)分析——回歸分析

調(diào)整的多重判定系數(shù)

用樣本容量n和自變量的個(gè)數(shù)k去修正R^2得到:
統(tǒng)計(jì)分析——回歸分析
避免增加自變量而高估R^2

曲線回歸分析

直線關(guān)系是兩變量間最簡單的一種關(guān)系,曲線回歸分析的基本任務(wù)是通過兩個(gè)相關(guān)變量x與y的實(shí)際觀測數(shù)據(jù)建立曲線回歸方程,以揭示x與y間的曲線聯(lián)系的形式。

曲線分析最困難和首要的工作是確定自變量與因變量的曲線關(guān)系的類型,曲線回歸分析的基本過程:

  1. 將x或y進(jìn)行變量轉(zhuǎn)換。
  2. 對新變量進(jìn)行直線回歸分析、建立直線回歸方程并進(jìn)行顯著性檢驗(yàn)和區(qū)間估計(jì)。
  3. 將新變量還原為原變量,由新變量的直線回歸方程和置信區(qū)間得出原變量的曲線回歸方程和置信區(qū)間。

由于曲線回歸模型種類繁多,所以沒有通用的回歸方程可直接使用。但是對于某些特殊的回歸模型,可以通過變量代換、取對數(shù)等方法對其線性化,然后使用標(biāo)準(zhǔn)方程求解參數(shù),再將參數(shù)帶回原方程就是所求。

例如:
統(tǒng)計(jì)分析——回歸分析
統(tǒng)計(jì)分析——回歸分析

多重共線性

回歸模型中兩個(gè)或兩個(gè)以上的自變量彼此相關(guān)的現(xiàn)象
多重共線性帶來的問題:

  • 回歸系數(shù)估計(jì)值的不穩(wěn)定增強(qiáng)
  • 回歸系數(shù)假設(shè)檢驗(yàn)的結(jié)果不顯著等

多重共線性檢驗(yàn)的主要方法

  • 容忍度
  • 方差膨脹因子(VIF)

容忍度

統(tǒng)計(jì)分析——回歸分析
Ri是解釋變量xi與方程中其他解釋變量間的復(fù)相關(guān)系數(shù);
容忍度在0~1之間,越接近于0,表示多重共線性越強(qiáng)。

方差膨脹因子

方差膨脹因子是容忍度的倒數(shù):
統(tǒng)計(jì)分析——回歸分析

VIFi越大,特別是>=10,說明解釋變量xi與方程中其他解釋變量之間有嚴(yán)重的多重共線性;
VIFi越接近于1,表明解釋變量xi和其他解釋變量之間的多重共線性越弱。

Python工具包介紹

Statsmodels

用來做統(tǒng)計(jì)分析
Statsmodels 是一個(gè) Python 模塊,它提供用于估計(jì)許多不同統(tǒng)計(jì)模型以及進(jìn)行統(tǒng)計(jì)測試和統(tǒng)計(jì)數(shù)據(jù)探索的類和函數(shù)。 每個(gè)估算器都有一個(gè)廣泛的結(jié)果統(tǒng)計(jì)列表。 對照現(xiàn)有的統(tǒng)計(jì)數(shù)據(jù)包對結(jié)果進(jìn)行測試,以確保它們是正確的。 該軟件包是在開源修改 BSD(3 條款)許可下發(fā)布的。

一元線性回歸

# 導(dǎo)入功能包,產(chǎn)生數(shù)據(jù)
import numpy as np
import matplotlib.pyplot as plt
import statsmodels.api as sm

nsample = 20 # 20個(gè)樣本點(diǎn)
x = np.linspace(0,10,nsample) # 從0到20之間選擇20個(gè)數(shù)(等距)
print(x)

[ 0. 0.52631579 1.05263158 1.57894737 2.10526316 2.63157895
3.15789474 3.68421053 4.21052632 4.73684211 5.26315789 5.78947368
6.31578947 6.84210526 7.36842105 7.89473684 8.42105263 8.94736842
9.47368421 10. ]

# 加一列1,為了與常數(shù)項(xiàng)進(jìn)行組合
X = sm.add_constant(x)
print(X)

[[ 1. 0. ]
[ 1. 0.52631579]
[ 1. 1.05263158]
[ 1. 1.57894737]
[ 1. 2.10526316]
[ 1. 2.63157895]
[ 1. 3.15789474]
[ 1. 3.68421053]
[ 1. 4.21052632]
[ 1. 4.73684211]
[ 1. 5.26315789]
[ 1. 5.78947368]
[ 1. 6.31578947]
[ 1. 6.84210526]
[ 1. 7.36842105]
[ 1. 7.89473684]
[ 1. 8.42105263]
[ 1. 8.94736842]
[ 1. 9.47368421]
[ 1. 10. ]]

# 產(chǎn)生β0與β1(真實(shí)情況)
beta = np.array([2,5])
print(beta)

[2 5]

# 誤差項(xiàng)(設(shè)置抖動(dòng),為了讓數(shù)據(jù)更真實(shí))
e = np.random.normal(size=nsample)
print(e)

[ 0.82944189 1.67229293 0.39780164 1.24295698 1.475433 0.8642918
-0.34345566 1.03677286 0.26148177 -1.03382748 -0.09721028 0.66122185
-0.54803173 0.40733307 0.32082923 1.38139669 -0.81902716 0.45718195
1.31683565 1.03592956]

# 實(shí)際值y
y = np.dot(X,beta) + e
print(y)

[ 2.82944189 6.30387188 7.66095953 11.13769382 14.00174879 16.02218654
17.44601802 21.45782549 23.31411335 24.65038305 28.2185792 31.60859027
33.03091564 36.61785938 39.1629345 42.8550809 43.286236 47.19402405
50.6852567 53.03592956]

# 最小二乘法
model = sm.OLS(y,X)
# 擬合數(shù)據(jù)
res = model.fit()
# 計(jì)算的回歸系數(shù)β0和β1
print(res.params)

[2.77235974 4.95072454]

# 產(chǎn)生全部結(jié)果
res.summary()

統(tǒng)計(jì)分析——回歸分析

# 擬合的估計(jì)值
y_ = res.fittedvalues
print(y_)

[ 2.77235974 5.37800424 7.98364873 10.58929322 13.19493772 15.80058221
18.4062267 21.0118712 23.61751569 26.22316018 28.82880467 31.43444917
34.04009366 36.64573815 39.25138265 41.85702714 44.46267163 47.06831613
49.67396062 52.27960511]

fig, ax = plt.subplots(figsize=(8,6))
ax.plot(x,y,'o',label='data') # 原始數(shù)據(jù)
ax.plot(x,y_,'r--',label='test') # 擬合數(shù)據(jù)
ax.legend(loc='best')
plt.show()

統(tǒng)計(jì)分析——回歸分析

高階回歸

# Y=5+2X+3X^2

nsample=50
x=np.linspace(0,10,nsample)
X=np.column_stack((x,x**2)) # 添加原始數(shù)據(jù)
X=sm.add_constant(X)
# 則X的第一列為1,第二列為x,第三列為x^2
# 構(gòu)造beta
beta=np.array([5,2,3]) # 真實(shí)值
e=np.random.normal(size=nsample) # 誤差
y=np.dot(X,beta)+e # 產(chǎn)生y真實(shí)值
model=sm.OLS(y,X) # 最小二乘法
results=model.fit()
results.params # 計(jì)算最終系數(shù)值

[4.93081682, 2.22120911, 2.97636437]

# 產(chǎn)生全部結(jié)果
results.summary()

統(tǒng)計(jì)分析——回歸分析

# 畫圖展示結(jié)果
y_fitted=results.fittedvalues
fit,ax=plt.subplots(figsize=(8,6))
ax.plot(x,y,'o',label='data')
ax.plot(x,y_fitted,'r--.',label='OLS')
ax.legend(loc='best')
plt.show()

統(tǒng)計(jì)分析——回歸分析

分類變量

假設(shè)分類變量有3個(gè)取值(a,b,c),比如考試成績有3個(gè)等級(jí)。那么a就是(1,0,0),b(0,1,0),c(0,0,1),這個(gè)時(shí)候就需要3個(gè)系數(shù)β0,β1,β2,也就是β0x0+β1x1+β2x2。

# 構(gòu)造0列表
nsample=50
groups=np.zeros(nsample,int)
groups

array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0])

# 轉(zhuǎn)化為矩陣
groups[20:40]=1
groups[40:]=2
dummy=sm.categorical(groups,drop=True) #轉(zhuǎn)化類型
dummy

統(tǒng)計(jì)分析——回歸分析

# Y=5+2X+3Z1+6*Z2+9*Z3.

x = np.linspace(0,20,nsample)
X=np.column_stack((x,dummy))
X=sm.add_constant(X)
beta=[5,2,3,6,9]
e=np.random.normal(size=nsample)
y=np.dot(X,beta)+e
result=sm.OLS(y,X).fit()
result.summary()

統(tǒng)計(jì)分析——回歸分析

# 畫圖
fig, ax=plt.subplots(figsize=(8,6))
ax.plot(x,y,'o',label="data")
ax.plot(x,result.fittedvalues,'r--',label="OLS")
ax.legend(loc='best')
plt.show()

統(tǒng)計(jì)分析——回歸分析

Scikit-learn

用來做機(jī)器學(xué)習(xí)
Scikit-learn(以前稱為scikits.learn,也稱為sklearn)是針對Python 編程語言的免費(fèi)軟件機(jī)器學(xué)習(xí)庫 。它具有各種分類,回歸和聚類算法,包括支持向量機(jī),隨機(jī)森林,梯度提升,k均值和DBSCAN,并且旨在與Python數(shù)值科學(xué)庫NumPy和SciPy聯(lián)合使用。

實(shí)戰(zhàn):汽車價(jià)格預(yù)測

數(shù)據(jù)字典

統(tǒng)計(jì)分析——回歸分析
數(shù)據(jù)來源: https://archive.ics.uci.edu/ml/datasets/Automobile

數(shù)據(jù)讀取與分析

# 加載功能包
import numpy as np
import pandas as pd
import datetime 

# 數(shù)據(jù)可視化和缺失值
import matplotlib.pyplot as plt
import seaborn as sns # 高級(jí)可視化
import missingno as msno # 對缺失值進(jìn)行可視化展示
%matplotlib inline

# 統(tǒng)計(jì)數(shù)據(jù)
from statsmodels.distributions.empirical_distribution import ECDF
from sklearn.metrics import mean_squared_error, r2_score

# 機(jī)器學(xué)習(xí)
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import Lasso, LassoCV 
from sklearn.model_selection import train_test_split, cross_val_score 
from sklearn.ensemble import RandomForestRegressor
seed=123 # 隨機(jī)種子(控制隨機(jī)因素)

# 讀取數(shù)據(jù)集
data = pd.read_csv("CarPrice_Assignment.csv", na_values = '?')
data.columns

Index([‘car_ID’, ‘symboling’, ‘CarName’, ‘fueltype’, ‘a(chǎn)spiration’,
‘doornumber’, ‘carbody’, ‘drivewheel’, ‘enginelocation’, ‘wheelbase’,
‘carlength’, ‘carwidth’, ‘carheight’, ‘curbweight’, ‘enginetype’,
‘cylindernumber’, ‘enginesize’, ‘fuelsystem’, ‘boreratio’, ‘stroke’,
‘compressionratio’, ‘horsepower’, ‘peakrpm’, ‘citympg’, ‘highwaympg’,
‘price’],
dtype=‘object’)

# 查看數(shù)據(jù)類型
data.dtypes

car_ID int64
symboling int64
CarName object
fueltype object
aspiration object
doornumber object
carbody object
drivewheel object
enginelocation object
wheelbase float64
carlength float64
carwidth float64
carheight float64
curbweight int64
enginetype object
cylindernumber object
enginesize int64
fuelsystem object
boreratio float64
stroke float64
compressionratio float64
horsepower int64
peakrpm int64
citympg int64
highwaympg int64
price float64
dtype: object

# 查看數(shù)據(jù)本身
print("IN total:",data.shape)
data.head(5)

統(tǒng)計(jì)分析——回歸分析
205條數(shù)據(jù),26個(gè)特征

# 顯示CSV中的數(shù)值信息
data.describe()

統(tǒng)計(jì)分析——回歸分析

缺失值處理(NaN)

當(dāng)然本案例是沒有缺失值的,若有需要用missingno功能包進(jìn)行可視化展示,要么去掉缺失值,要么用平均值或者眾數(shù)、中位數(shù)替代。

# 查看缺失值
sns.set(style = "ticks") # 指定風(fēng)格
msno.matrix(data)

統(tǒng)計(jì)分析——回歸分析
若有缺失值:
統(tǒng)計(jì)分析——回歸分析
對于缺失值較為嚴(yán)重的數(shù)據(jù)

# 展示缺失值數(shù)據(jù)
data[pd.isnull(data['normalized-losses'])].head()

統(tǒng)計(jì)分析——回歸分析

# 進(jìn)行數(shù)據(jù)分布分析,然后選擇填充數(shù)據(jù)
sns.set(style = "ticks")
plt.figure(figsize = (12, 5)) 
c = '#366DE8'

# ECDF
plt.subplot(121)
cdf = ECDF(data['normalized-losses'])   #查看連續(xù)分布,累計(jì)結(jié)果
plt.plot(cdf.x, cdf.y, label = "statmodels", color = c);
plt.xlabel('normalized losses'); plt.ylabel('ECDF');

# overall distribution
plt.subplot(122)
plt.hist(data['normalized-losses'].dropna(), 
         bins = int(np.sqrt(len(data['normalized-losses']))),
         color = c);

統(tǒng)計(jì)分析——回歸分析

# 按照不同的風(fēng)險(xiǎn)等級(jí)分成不同的組,然后觀察每組缺失值情況
data.groupby([symboling])["normalized-losses"].describe()

統(tǒng)計(jì)分析——回歸分析

# 使用最相關(guān)數(shù)值進(jìn)行填充
data = data.dropna(subset = ['price', 'bore', 'stroke', 'peak-rpm', 'horsepower', 'num-of-doors']) #對于缺失值少的幾列,直接刪掉缺失值
data['normalized-losses'] = data.groupby('symboling')['normalized-losses'].transform(lambda x: x.fillna(x.mean()))  #填充缺失值
print('In total:', data.shape)
data.head()

特征相關(guān)性

cormatrix = data.corr()
cormatrix

統(tǒng)計(jì)分析——回歸分析

cormatrix *= np.tri(*cormatrix.values.shape, k=-1).T  #返回函數(shù)的上三角矩陣,把對角線上的置0,讓他們不是最高的。
cormatrix

統(tǒng)計(jì)分析——回歸分析

#某一指標(biāo)與其他指標(biāo)的關(guān)系
cormatrix = cormatrix.stack() 
cormatrix

統(tǒng)計(jì)分析——回歸分析

# 按照從大到小排序
cormatrix = cormatrix.reindex(cormatrix.abs().sort_values(ascending=False).index).reset_index()
cormatrix

統(tǒng)計(jì)分析——回歸分析

# 選擇相關(guān)系數(shù)大的一個(gè)影響因素即可
# 并選擇本身性質(zhì)關(guān)系的一個(gè)即可(如長寬高—>體積)
data['volume'] = data.carlength * data.carwidth * data.carheight

data.drop(['carwidth', 'carlength', 'carheight', 
           'curbweight', 'citympg'], 
          axis = 1, # 1 for columns
          inplace = True) 
# 新變量
data.columns

Index([‘car_ID’, ‘symboling’, ‘CarName’, ‘fueltype’, ‘a(chǎn)spiration’,
‘doornumber’, ‘carbody’, ‘drivewheel’, ‘enginelocation’, ‘wheelbase’,
‘enginetype’, ‘cylindernumber’, ‘enginesize’, ‘fuelsystem’, ‘boreratio’,
‘stroke’, ‘compressionratio’, ‘horsepower’, ‘peakrpm’, ‘highwaympg’,
‘price’, ‘volume’],
dtype=‘object’)

# 畫出相關(guān)性的熱度圖

# 計(jì)算相關(guān)矩陣
corr_all = data.corr()

# 為上三角形生成蒙版
mask = np.zeros_like(corr_all, dtype = np.bool)
mask[np.triu_indices_from(mask)] = True

# 設(shè)置 matplotlib 圖
f, ax = plt.subplots(figsize = (11, 9))

# 使用蒙版和正確的縱橫比繪制熱圖
sns.heatmap(corr_all, mask = mask,
            square = True, linewidths = .5, ax = ax, cmap = "BuPu")      
plt.show()

統(tǒng)計(jì)分析——回歸分析

# 統(tǒng)計(jì)每一個(gè)指標(biāo)的情況
sns.pairplot(data, hue = 'fueltype', palette = 'plasma')
# 返回的是當(dāng)前對于不同變量來說的各種圖
# 按照hue的指標(biāo),把數(shù)據(jù)分為幾種

統(tǒng)計(jì)分析——回歸分析

# 某幾個(gè)指標(biāo)之間的關(guān)系
sns.lmplot('price', 'horsepower', data, 
           hue = 'fueltype', col = 'fueltype',  row = 'doornumber', 
           palette = 'plasma', 
           fit_reg = True);
#參數(shù):1指定橫軸;2指定縱軸;傳進(jìn)數(shù)據(jù)data;hue按照哪個(gè)變化(參數(shù)的個(gè)數(shù));col按列區(qū)分;row按行區(qū)分

統(tǒng)計(jì)分析——回歸分析

預(yù)處理

對連續(xù)值進(jìn)行標(biāo)量化

# 目標(biāo)和特點(diǎn)
target = data.price

regressors = [x for x in data.columns if x not in ['price']]
features = data.loc[:, regressors]

num = ['symboling', 'volume', 'horsepower', 'wheelbase',
       'boreratio', 'stroke','compressionratio', 'peakrpm']

# 縮放數(shù)據(jù) 
standard_scaler = StandardScaler() # 進(jìn)行特征標(biāo)準(zhǔn)化
features[num] = standard_scaler.fit_transform(features[num])

# 展示結(jié)果
features.head()

統(tǒng)計(jì)分析——回歸分析

# 對分類屬性進(jìn)行one-bot編碼

# 分類變量
classes = ['CarName', 'fueltype', 'aspiration', 'doornumber', 
           'carbody', 'drivewheel', 'enginelocation',
           'enginetype', 'cylindernumber', 'fuelsystem']

# 僅使用 continios vars 創(chuàng)建新數(shù)據(jù)集
dummies = pd.get_dummies(features[classes])
features = features.join(dummies).drop(classes, axis = 1)

# 新數(shù)據(jù)集
print('In total:', features.shape)
features.head()

統(tǒng)計(jì)分析——回歸分析
205條數(shù)據(jù),196個(gè)特征

# 劃分?jǐn)?shù)據(jù)集,按照30%劃分(訓(xùn)練集和測試集)
X_train, X_test, y_train, y_test = train_test_split(features, target, test_size = 0.3,random_state = seed)
print("Train", X_train.shape, "and test", X_test.shape)

Train (143, 196) and test (62, 196)

Lasso回歸

多加了一個(gè)絕對值想來懲罰過大的系數(shù):alphas=0那就是最小二乘了。

# 對數(shù)刻度:以 2 為底的對數(shù)
# 高值將更多變量歸零
alphas = 2. ** np.arange(2, 20) #指定alphas的范圍
scores = np.empty_like(alphas)

# 測試集
for i, a in enumerate(alphas):
    lasso = Lasso(random_state = seed) # 指定模型
    lasso.set_params(alpha = a)
    lasso.fit(X_train, y_train)
    scores[i] = lasso.score(X_test, y_test)
    
    
# 交叉驗(yàn)證cross validation     
lassocv = LassoCV(cv = 10, random_state = seed)
lassocv.fit(features, target)
lassocv_score = lassocv.score(features, target)
lassocv_alpha = lassocv.alpha_

plt.figure(figsize = (10, 4))
plt.plot(alphas, scores, '-ko')
plt.axhline(lassocv_score)
plt.xlabel(r'$\alpha$')
plt.ylabel('CV Score')
plt.xscale('log', basex = 2)
sns.despine(offset = 15)

print('CV results:', lassocv_score, lassocv_alpha)

統(tǒng)計(jì)分析——回歸分析

# 特征重要性分析
# lassocv 系數(shù)
coefs = pd.Series(lassocv.coef_, index = features.columns)

# 打印出選擇/消除特征的數(shù)量
print("Lasso picked " + str(sum(coefs != 0)) + " features and eliminated the other " +  \
      str(sum(coefs == 0)) + " features.")

# 展示前5個(gè)和后5個(gè)
coefs = pd.concat([coefs.sort_values().head(5), coefs.sort_values().tail(5)])

plt.figure(figsize = (10, 4))
coefs.plot(kind = "barh")
plt.title("Coefficients in the Lasso Model")
plt.show()

統(tǒng)計(jì)分析——回歸分析

# 選擇上面計(jì)算出來的最好的Alphas,進(jìn)行預(yù)測
model_l1 = LassoCV(alphas = alphas, cv = 10, random_state = seed).fit(X_train, y_train)
y_pred_l1 = model_l1.predict(X_test)

model_l1.score(X_test, y_test)

0.8156778549898953

# residual plot 殘差圖——畫圖表示實(shí)際值和預(yù)測值之間的差異
plt.rcParams['figure.figsize'] = (6.0, 6.0)

preds = pd.DataFrame({"preds": model_l1.predict(X_train), "true": y_train})
preds["residuals"] = preds["true"] - preds["preds"]
preds.plot(x = "preds", y = "residuals", kind = "scatter", color = "c")

統(tǒng)計(jì)分析——回歸分析

#計(jì)算指標(biāo):MSE和R2 
def MSE(y_true,y_pred):
    mse = mean_squared_error(y_true, y_pred)
    print('MSE: %2.3f' % mse)
    return mse

def R2(y_true,y_pred):    
    r2 = r2_score(y_true, y_pred)
    print('R2: %2.3f' % r2)     
    return r2

MSE(y_test, y_pred_l1); R2(y_test, y_pred_l1);

MSE: 6033979.103
R2: 0.816文章來源地址http://www.zghlxwxcb.cn/news/detail-464410.html

# 結(jié)果預(yù)測
d = {'true' : list(y_test),
     'predicted' : pd.Series(y_pred_l1)
    }

pd.DataFrame(d).head()

到了這里,關(guān)于統(tǒng)計(jì)分析——回歸分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 統(tǒng)計(jì)學(xué)補(bǔ)充概念-13-邏輯回歸

    統(tǒng)計(jì)學(xué)補(bǔ)充概念-13-邏輯回歸

    邏輯回歸(Logistic Regression)實(shí)際上是一種用于解決分類問題的統(tǒng)計(jì)學(xué)習(xí)方法,盡管其名稱中帶有\(zhòng)\\"回歸\\\"一詞,但它主要用于處理分類任務(wù)。邏輯回歸用于預(yù)測一個(gè)事件發(fā)生的概率,并將其映射到一個(gè)特定的輸出類別。 邏輯回歸的基本思想是,通過一個(gè)線性組合的方式將輸入特

    2024年02月11日
    瀏覽(30)
  • 統(tǒng)計(jì)學(xué) 一元線性回歸

    統(tǒng)計(jì)學(xué) 一元線性回歸

    回歸(Regression) :假定因變量與自變量之間有某種關(guān)系,并把這種關(guān)系用適當(dāng)?shù)臄?shù)學(xué)模型表達(dá)出來,利用該模型根據(jù)給定的自變量來預(yù)測因變量 線性回歸 :因變量和自變量之間是線性關(guān)系 非線性回歸 :因變量和自變量之間是非線性關(guān)系 變量間的關(guān)系 :往往分為 函數(shù)關(guān)系

    2024年02月06日
    瀏覽(27)
  • 統(tǒng)計(jì)學(xué)補(bǔ)充概念07-比較樹

    在層次聚類中,聚類結(jié)果可以以樹狀結(jié)構(gòu)表示,通常稱為樹狀圖(Dendrogram)。樹狀圖展示了數(shù)據(jù)點(diǎn)如何被合并或分裂以形成聚類的層次結(jié)構(gòu)。通過觀察樹狀圖,可以更直觀地理解數(shù)據(jù)點(diǎn)之間的相似性和關(guān)系。 高度和距離:樹狀圖中的垂直軸表示合并或分裂的距離或相似度。

    2024年02月11日
    瀏覽(22)
  • 統(tǒng)計(jì)學(xué)補(bǔ)充概念-16-支持向量機(jī) (SVM)

    支持向量機(jī)(Support Vector Machine,SVM)是一種用于分類和回歸的機(jī)器學(xué)習(xí)算法。SVM的主要目標(biāo)是找到一個(gè)最優(yōu)的超平面,可以將不同類別的數(shù)據(jù)樣本分開,同時(shí)使得支持向量(離超平面最近的樣本點(diǎn))與超平面之間的間隔最大化。這個(gè)超平面可以用于分類新的樣本數(shù)據(jù)。 SVM在

    2024年02月11日
    瀏覽(17)
  • 統(tǒng)計(jì)分析——回歸分析

    統(tǒng)計(jì)分析——回歸分析

    在統(tǒng)計(jì)學(xué)中,回歸分析(regression analysis)指的是確定兩種或兩種以上變量間相互依賴的定量關(guān)系的一種統(tǒng)計(jì)分析方法?;貧w分析按照涉及的變量的多少,分為一元回歸和多元回歸分析;按照因變量的多少,可分為簡單回歸分析和多重回歸分析;按照自變量和因變量之間的關(guān)系

    2024年02月06日
    瀏覽(20)
  • 統(tǒng)計(jì)學(xué) - 數(shù)理統(tǒng)計(jì)與應(yīng)用統(tǒng)計(jì)的區(qū)別

    目錄 1. 概率與統(tǒng)計(jì) 2. 數(shù)理統(tǒng)計(jì)與應(yīng)用統(tǒng)計(jì) 概率論是研究隨機(jī)現(xiàn)象數(shù)量規(guī)律的數(shù)學(xué)分支。隨機(jī)現(xiàn)象是相對于決定性現(xiàn)象而言的,在一定條件下必然發(fā)生某一結(jié)果的現(xiàn)象稱為決定性現(xiàn)象。例如在標(biāo)準(zhǔn)大氣壓,純水加熱到100℃時(shí)水必然會(huì)沸騰等。隨機(jī)現(xiàn)象則是指在基本條件不變的

    2024年02月13日
    瀏覽(24)
  • 《SPSS統(tǒng)計(jì)學(xué)基礎(chǔ)與實(shí)證研究應(yīng)用精解》視頻講解:SPSS依托統(tǒng)計(jì)學(xué)處理數(shù)據(jù)的應(yīng)用場景

    《SPSS統(tǒng)計(jì)學(xué)基礎(chǔ)與實(shí)證研究應(yīng)用精解》視頻講解:SPSS依托統(tǒng)計(jì)學(xué)處理數(shù)據(jù)的應(yīng)用場景

    《SPSS統(tǒng)計(jì)學(xué)基礎(chǔ)與實(shí)證研究應(yīng)用精解》1.4 視頻講解 視頻為 《SPSS統(tǒng)計(jì)學(xué)基礎(chǔ)與實(shí)證研究應(yīng)用精解》張?zhí)?楊維忠著 清華大學(xué)出版社 一書的隨書贈(zèng)送視頻講解1.4節(jié)內(nèi)容 。本書已正式出版上市,當(dāng)當(dāng)、京東、淘寶等平臺(tái)熱銷中,搜索書名即可。本書旨在手把手教會(huì)使用SPSS撰寫實(shí)

    2024年01月23日
    瀏覽(22)
  • 統(tǒng)計(jì)學(xué)期末復(fù)習(xí)整理

    統(tǒng)計(jì)學(xué):描述統(tǒng)計(jì)學(xué)和推斷統(tǒng)計(jì)學(xué)。計(jì)量尺度:定類尺度、定序尺度、定距尺度、定比尺度。 描述統(tǒng)計(jì)中的測度: 1.數(shù)據(jù)分布的集中趨勢 2.數(shù)據(jù)分布的離散程度 3.數(shù)據(jù)分布的形狀。 離散系數(shù) 也稱為標(biāo)準(zhǔn)差系數(shù),通常是用一組數(shù)據(jù)的標(biāo)準(zhǔn)差與其平均數(shù)之比計(jì)算 C . V . = s x  ̄

    2024年02月07日
    瀏覽(30)
  • 統(tǒng)計(jì)學(xué)-R語言-3

    統(tǒng)計(jì)學(xué)-R語言-3

    本篇文章是介紹對數(shù)據(jù)的部分圖形可視化的圖型展現(xiàn)。 需要注意的是,給直方圖擬合正態(tài)分布曲線并非總是適用,有時(shí)甚至是荒謬的,容易產(chǎn)生誤導(dǎo)。合理的做法是為直方圖擬合一條核密度估計(jì)曲線,它是數(shù)據(jù)實(shí)際分布的一種近似描述。 下面通過一個(gè)實(shí)際例子說明給直方圖

    2024年01月16日
    瀏覽(23)
  • SCAU 統(tǒng)計(jì)學(xué) 實(shí)驗(yàn)5

    SCAU 統(tǒng)計(jì)學(xué) 實(shí)驗(yàn)5

    8.14 總體平均值(μ):7.0 cm 總體方差(σ2):0.03 cm2 樣本平均值(x?):6.97 cm 樣本方差(s2):0.0375 cm2 樣本大?。╪):80 在這個(gè)問題中,我們已經(jīng)知道總體方差(σ2),所以應(yīng)該使用 z 檢驗(yàn)。 將檢驗(yàn)以下零假設(shè)(H?): H?: μ = 7.0 cm 與備擇假設(shè)(H?): H?: μ ≠

    2024年02月01日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包