人工智能與機器學習(1)——初識線性回歸
目錄
一.用excel中數據分析功能做線性回歸練習
1.選取前二十,兩百,兩千組數據生成散點圖,再點擊任意一個點,右鍵添加趨勢線選擇線性並選擇顯示公式。
二.通過jupyter進行python編程實現線性回歸練習
通過python實現最小二乘法對數據進行擬合初步了解學習線性回歸
1.不借助第三方庫使用最小二乘法對數據進行擬合
import numpy as np
import pandas
import xlrd
import matplotlib.pyplot as plt
首先引入數據處理所需要的包
#導入需要讀取Excel表格的路徑
data = xlrd.open_workbook("weights_heights.xls")
table = data.sheets()[1]
x=[]
y=[]
for i in range (1,5000):
x.append(table.cell(i,1).value)
y.append(table.cell(i,2).value)
將表格中數據存入到數組之中
plt.scatter(x[0:200], y[0:200])
plt.show()
使用前兩百組數據畫出散點圖
通過上課學習得知通過最小二乘法所得到的線性回歸方程參數為上圖所示
def f(a):
sum=0
pingjunx=0
pingjuny=0
chu=0
for i in range(0,a):
pingjunx+=x[i]
pingjuny+=y[i]
pingjuny/=a
pingjunx/=a
for i in range(0,a):
sum+=(x[i]-pingjunx)*(y[i]-pingjuny)
chu+=(x[i]-pingjunx)*(x[i]-pingjuny)
B1=sum/chu
B0=pingjuny-B1*pingjunx
print(B1)
print(B0)
xx = np.linspace(0,100, 100)
yy = B1*xx+B0
plt.scatter(x[0:a], y[0:a],s = 1)
plt.xlim(62,74)
plt.ylim(0,180)
print("相關系數R^2為")
shang=0
xia1=0
xia2=0
for i in range (0,a):
xia1+=(x[i]-pingjunx)*(x[i]-pingjunx)
xia2+=(y[i]-pingjuny)*(y[i]-pingjuny)
shang+=(x[i]-pingjunx)*(y[i]-pingjuny)
print(shang*shang/(xia1*xia2))
plt.plot(xx, yy, c='orange')
plt.show()
return
如下圖所示是取前兩百個數組時所得到的線性回歸方程y=3.431665151629877*x-105.95901104669866 相關系數為0.30999553433092275
f(200)
3.431665151629877
-105.95901104669866
相關系數R^2為
0.30999553433092275
f(2000)
2.955526969810711
-73.66078552357604
相關系數R^2為
0.2483012033638441
如下圖所示是取前兩千個數時所得到的線性回歸方程y=2.955526969810711*x-73.66078552357604 相關系數為0.2483012033638441
f(20)
4.128037498887677
-152.23378453438318
相關系數R^2為
0.32542302493662534
如下圖所示是取前二十個數時所得到的線性回歸方程y=4.128037498887677*x-152.23378453438318 相關系數為0.32542302493662534
2.借助skleran對數據進行擬合
from sklearn import linear_model
引入所需要的包
def ff(a):
model = linear_model.LinearRegression()
model.fit(np.array(x[0:a]).reshape(-1, 1),np.array(y[0:a]).reshape(-1, 1))
print(model.coef_)
print(model.intercept_)
通過sklearn中的api創建一個線性回歸模型,選取a個數據進行擬合輸出截距以及斜率
ff(20)
[[4.1280375]]
[-152.23378453]
ff(200)
[[3.43166515]]
[-105.95901105]
ff(2000)
[[2.95552697]]
[-73.66078552]
可以看到sklearn他的一元線性回歸方程也是通過最小二乘法來實現以至於得到了同樣的結果