.线性回归(Linear Regression)
1.1什么是線性回歸
我們首先用弄清楚什么是線性,什么是非線性。
(1)線性:兩個變量之間的關系是一次函數關系的——圖象是直線,叫做線性。
注意:題目的線性是指廣義的線性,也就是數據與數據之間的關系。
(2)非線性:兩個變量之間的關系不是一次函數關系的——圖象不是直線,叫做非線性。
相信通過以上兩個概念大家已經很清楚了,其次我們經常說的回歸回歸到底是什么意思呢。
回歸:人們在測量事物的時候因為客觀條件所限,求得的都是測量值,而不是事物真實的值,為了能夠得到真實值,無限次的進行測量,最后通過這些測量數據計算回歸到真實值,這就是回歸的由來。
通俗的說就是用一個函數去逼近這個真實值,那又有人問了,線性回歸不是用來做預測嗎?是的,通過大量的數據我們是可以預測到真實值的。
1.2線性回歸要解決什么問題
對大量的觀測數據進行處理,從而得到比較符合事物內部規律的數學表達式。也就是說尋找到數據與數據之間的規律所在,從而就可以模擬出結果,也就是對結果進行預測。解決的就是通過已知的數據得到未知的結果。例如:對房價的預測、判斷信用評價、電影票房預估等。
以下是python代碼實現線性回歸算法:
from numpy import *
import pandas as pd
# 導入數據
def loadDataSet(fileName):
? ? numFeat = len(open(fileName).readline().split(' ?')) - 1
? ? dataMat = []
? ? labelMat = []
? ? fr = open(fileName)
? ? for line in fr.readlines():
? ? ? ? lineArr = []
? ? ? ? curLine = line.strip().split(' ?')
? ? ? ? for i in range(numFeat):
? ? ? ? ? ? lineArr.append(float(curLine[i]))
? ? ? ? dataMat.append(lineArr)
? ? ? ? labelMat.append(float(curLine[-1]))
? ? return dataMat, labelMat
# 求回歸系數
def standRegres(xArr, yArr):
? ? xMat = mat(xArr)
? ? yMat = mat(yArr).T
? ? xTx = xMat.T * xMat
? ? if linalg.det(xTx) == 0.0: ?# 判斷行列式是否為0
? ? ? ? print("行列式為0")
? ? ? ? return
? ? ws = xTx.I * (xMat.T * yMat) ?# 也可以用NumPy庫的函數求解:ws=linalg.solve(xTx,xMat.T*yMatT)
? ? return ws
if __name__ == "__main__":
? ? xArr, yArr = loadDataSet('Salary_Data.txt')
? ? ws = standRegres(xArr, yArr)
? ? xMat = mat(xArr)
? ? yMat = mat(yArr)
? ? # 預測值
? ? yHat = xMat * ws
? ? # 計算預測值和真實值得相關性
? ? corrcoef(yHat.T, yMat) ?# 0.986
? ? # 繪制數據集散點圖和最佳擬合直線圖
? ? # 創建圖像并繪出原始的數據
? ? import matplotlib.pyplot as plt
? ? fig = plt.figure()
? ? ax = fig.add_subplot(111)
? ? ax.scatter(xMat[:, 1].flatten().A[0], yMat.T[:, 0].flatten().A[0])
? ? # 繪最佳擬合直線,需先要將點按照升序排列
? ? xCopy = xMat.copy()
? ? xCopy.sort(0)
? ? yHat = xCopy * ws
? ? ax.plot(xCopy[:, 1], yHat)
? ? plt.show()
總結
以上是生活随笔為你收集整理的.线性回归(Linear Regression)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 想做软件测试的女孩子看这里
- 下一篇: 计算eer python