用python求解多元線性回歸方程的權重和殘差

2021-10-05 10:20:43 字數 2632 閱讀 6818

最近學金融的妹妹要處理資料寫**,對乙個文科妹子來說,數學學不會,公式看不懂怎麼破~作為姐姐的我看在眼裡,疼在心裡,打算幫妹妹解決掉資料計算這方面的問題。原來就是求三元線性回歸的殘差啊,害,這有什麼難的,妹妹就是不會算權重,一直在網上尋找已經算好權重的資料,為此特意開通了什麼會員,咱也不知道咱也不敢問。於是乎,利用自己所學的python,寫下了這個程式。

簡單介紹一下什麼是線性回歸?

答:線性回歸是通過乙個或多個自變數與因變數之間進行建模的回歸分析。其中可以為乙個或多個自變數之間的線性組合

一元線性回歸涉及到的變數只有乙個;多元線性回歸涉及到的變數有兩個及兩個以上。

線性關係模型為:

w為權重,b為偏置項,其中wx

方法一:先將excel表轉換成.txt檔案

接下來開啟.txt檔案,另存為』utf-8』格式,如果不是,會報錯。

from numpy.linalg import inv  # 矩陣求逆

from numpy import dot # 求矩陣點乘

import numpy as np

import pandas as pd

txt = np.loadtxt(

'file.txt'

)txtdf = pd.dataframe(txt)

txtdf.to_csv(

'file.csv'

, index=

false

)data = pd.read_csv(

'file.csv'

)dataset = pd.dataframe(data,copy =

true

)test = dataset.iloc[:,

0:4]

test = test.copy(

)x = test.iloc[:,

[1,2

,3]]

y = test.iloc[:,

0]theta = dot(dot(inv(dot(x.t, x)

), x.t)

, y)

y = dot(theta, x.t)

print

('權重'

,theta)

# 權重

loss = np.array(y-y)

# 殘差

print

('殘差'

,loss)

執行結果:

權重和殘差都可以算出來了。

方法二:』.xlsx』 轉 『.csv』

from numpy.linalg import inv  # 矩陣求逆

from numpy import dot # 求矩陣點乘

import numpy as np

import pandas as pd

data = pd.read_excel(

'1.xlsx'

,index_col=0)

data.to_csv(

'data.csv'

,encoding=

'utf-8'

)data = pd.read_csv(

'data.csv'

)dataset = pd.dataframe(data,copy =

true

)test = dataset.iloc[:,

0:4]

test = test.copy(

)x = test.iloc[:,

[1,2

,3]]

y = test.iloc[:,

0]theta = dot(dot(inv(dot(x.t, x)

), x.t)

, y)

y = dot(theta, x.t)

print

('權重'

,theta)

# 權重

loss = np.array(y-y)

# 殘差

print

('殘差'

,loss)

執行結果跟上面是一樣的

多元線性回歸

多元線性回歸的基本原理和基本計算過程與一元線性回歸相同,但由於自變數個數多,計算相當麻煩,一般在實際中應用時都要借助統計軟體。介紹多元線性回歸的一些基本問題。但由於各個自變數的單位可能不一樣,比如說乙個消費水平的關係式中,工資水平 受教育程度 職業 地區 家庭負擔等等因素都會影響到消費水平,而這些影...

多元線性回歸

from numpy import genfromtxt 用來讀取資料轉化為矩陣 from sklearn import linear model 含有回歸的模型 datapath r c users qaq desktop delivery dummy.csv 路徑 deliverydata ge...

多元線性回歸

比如有乙個住房 的資料集,可能會有多個不同的模型用於擬合,選擇之一像是這種二次模型 0 1x 2x2,因為直線並不能很好的擬合這些資料。但是現在如果用二次函式去考慮,可能會想到二次函式在最高點之後會下降,但是 並不會下降,並不合理,那我們可以用 0 1x 2x2 3x3這樣的三次模型。如果像這樣選擇...