python--一元線性迴歸模型
阿新 • • 發佈:2020-12-16
模型中只有一個自變數和因變數可表示成。
數學公式可表示成:
其中a為模型的截距項,b為模型的斜率項,為模型的誤差項。模型中的a和b統稱為迴歸係數,誤差項的存在主要是為了平衡等號兩邊的值,通常被稱為模型無法解釋的部分。
擬合線的求解
就是如何根據自變數x和因變數y求解迴歸係數a和b。
如果擬合線能夠精確地捕捉到每一個點(所有的散點全部落在擬合線上),那麼對應的誤差項應該為0。按照這個思路,想要得到理想的擬合線,就必須使誤差項達到最小。誤差項最小問題需轉換為誤差平方和的最小的問題(最小二乘法的思路)
誤差平方和的公式可以表示為:
公式轉換
求解a和b
import matplotlib.pyplot as plt import matplotlib import pandas as pd import numpy as np import seaborn as sns import statsmodels.api as sm font = { 'family': 'FangSong', 'weight': 'bold', 'size': 12 } matplotlib.rc("font", **font) income = pd.read_csv('../data/Salary_Data.csv', delimiter=',') ''' 0 YearsExperience 30 non-null float64 1 Salary 30 non-null float64 ''' # 樣本量 n = income.shape[0] # 計算自變數、因變數、自變數平方、自變數與因變數乘積的和 sum_x = income.YearsExperience.sum() sum_y = income.Salary.sum() sum_x2 = income.YearsExperience.pow(2).sum() xy = income.YearsExperience * income.Salary sum_xy = xy.sum() # 根據公式計算迴歸模型的引數 b = (sum_xy - sum_x * sum_y/n)/(sum_x2 - sum_x**2/n) a = income.Salary.mean() - b * income.YearsExperience.mean() print(a) print(b) # 利用收入資料集,構建迴歸模型 fit = sm.formula.ols('Salary ~ YearsExperience', data=income).fit() print(fit.params)