人工智能與機器學習(1)——初識線性回歸


人工智能與機器學習(1)——初識線性回歸

一.用excel中數據分析功能做線性回歸練習

1.選取前二十,兩百,兩千組數據生成散點圖,再點擊任意一個點,右鍵添加趨勢線選擇線性並選擇顯示公式。

2

3

二.通過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()


png

使用前兩百組數據畫出散點圖

通過上課學習得知通過最小二乘法所得到的線性回歸方程參數為上圖所示

 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

png

f(2000)
2.955526969810711
-73.66078552357604
相關系數R^2為
0.2483012033638441


png

如下圖所示是取前兩千個數時所得到的線性回歸方程y=2.955526969810711*x-73.66078552357604 相關系數為0.2483012033638441

f(20)


4.128037498887677
-152.23378453438318
相關系數R^2為
0.32542302493662534


png

如下圖所示是取前二十個數時所得到的線性回歸方程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他的一元線性回歸方程也是通過最小二乘法來實現以至於得到了同樣的結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM