曲线 线性回归_机器学习笔记 线性回归
一、線性回歸找到最佳擬合直線
1. 定義
線性回歸是通過現(xiàn)有數(shù)據(jù),讓訓(xùn)練模型生成一個擬合公式,從而計算目標數(shù)據(jù)的預(yù)測值。
在統(tǒng)計學(xué)中,線性回歸(Linear Regression)是利用稱為“線性回歸方程”的最小二乘函數(shù)對一個或多個自變量和因變量之間關(guān)系進行建模的一種回歸分析。
這種函數(shù)是一個或多個稱為回歸系數(shù)的模型參數(shù)的線性組合。
- 只有一個自變量的情況稱為簡單回歸大于一個自變量情況的叫做多元回歸。
一個帶有一個自變量的線性回歸方程代表一條直線。我們需要對線性回歸結(jié)果進行統(tǒng)計分析。
線性回歸利用數(shù)理統(tǒng)計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關(guān)系的一種統(tǒng)計方法運用十分廣泛。其表達形式為y=x’x+e,e為誤差服從均值為 θ 的正態(tài)分布。
線性回歸假設(shè)物證和結(jié)果滿足線性關(guān)系。其實線性關(guān)系的表達能力非常強大,每個特征對結(jié)果的影響強弱可以由前面的參數(shù)體現(xiàn),而且每個特征變量可以首先映射到一個函數(shù),然后再參與線性計算。這樣就可以表達特征與結(jié)果之間的非線性關(guān)系。
回歸屬于有監(jiān)督學(xué)習(xí)中的一種方法。該方法的核心思想是從連續(xù)型統(tǒng)計數(shù)據(jù)中得到數(shù)學(xué)模型,然后將該數(shù)學(xué)模型用于預(yù)測或者分類。
該方法處理的數(shù)據(jù)可以是多維的。
2. 回歸與梯度下降
回歸在數(shù)學(xué)上來說是給定一個點集,能夠用一條曲線去擬合之。
如果這個曲線是一條直線,那就被稱為線性回歸;
如果曲線是一條二次曲線,就被稱為二次回歸。
回歸還有很多變種,如:locally weighted 回歸、logistic回歸等。
舉例,weka,做一個房屋價值的評估系統(tǒng)。相關(guān)變量可能有:
- 面積房間數(shù)量地段朝向
等。
這些影響房屋價值的變量被稱為特征(feature)。
為簡單起見,假設(shè)我們的房屋feature只有一個——房屋的面積。
準備數(shù)據(jù)如下:
面積(m^2)銷售價錢(萬元)12325015032087160102220……
x軸表示面積,y表示售價,則出來一個圖:
如果再給定一個面積,要計算售價,可以用一條曲線去盡量擬合這些數(shù)據(jù)。
一些概念
- 房屋銷售記錄表 - 訓(xùn)練集(training set)或者訓(xùn)練數(shù)據(jù)(training data),是我們流程中輸入數(shù)據(jù),一般稱為x房屋銷售價格 - 輸出數(shù)據(jù),一般稱為y擬合的函數(shù)(或者稱為假設(shè)、模型),一般寫做y=h(x)訓(xùn)練數(shù)據(jù)的條目數(shù)(#training set),一條訓(xùn)練數(shù)據(jù)是由一對輸入數(shù)據(jù)和輸出數(shù)據(jù)組成的。輸入數(shù)據(jù)的維度(特征的個數(shù),#features),n
典型的機器學(xué)習(xí)的過程
我們用X1,X2...Xn去描述feature里面的分量,比如x1=面積,x2=朝向等等,可以做出一個估計函數(shù):
θ 稱為參數(shù),在這兒的意思是調(diào)整feature中每個分量的影響力,就是到底是房屋的面積更重要兩袖清風(fēng)是房屋的地段更重要。如果令X0=1,就可以用向量的方式來表示了:
我們程序也需要一個機制去評估θ是否比較好,所以說需要對?函數(shù)進行評估,一般這個函數(shù)稱為損失函數(shù)(loss function)或者錯誤函數(shù)(error function),描述?函數(shù)不好的程度。在下面,做出一個錯誤函數(shù):
這個錯誤估計函數(shù)是去對x(i)的估計值與真實值y(i)差的平方和作為錯誤估計函數(shù),前面乘上1/2是為了在求導(dǎo)的時候,這個系數(shù)就不見了。
如何調(diào)整θ以使得J(θ)取得最小值有很多方法,其中有最小二乘法(min square),是一種完全是數(shù)學(xué)描述的方法,在stanford機器學(xué)習(xí)開放課最后的部分會推導(dǎo)最小二乘法的公式的來源,這個來很多的機器學(xué)習(xí)和數(shù)學(xué)書上都可以找到,下面介紹梯度下降法。
3. 梯度下降法
梯度下降法是按下面的流程來進行的:
4. 回歸的一般方法
二、Python實現(xiàn)線性回歸示例
代碼地址
核心代碼:
import numpy as npdef loadDataSet(fileName): numFeat = len(open(fileName).readline().split(','))-1 dataMat=[];labelMat = [] fr = open(fileName) for line in fr.readlines(): lineArr = [] print(line) 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# 回歸方程求取函數(shù)def fit(x,y): if len(x) != len(y): return numerator = 0.0 denominator = 0.0 x_mean = np.mean(x) y_mean = np.mean(y) for i in range(len(x)): numerator += (x[i]-x_mean)*(y[i]-y_mean) denominator += np.square((x[i]-x_mean)) print('numerator:',numerator,'denominator:',denominator) b0 = numerator/denominator b1 = y_mean - b0*x_mean return b0,b1# 定義預(yù)測函數(shù)def predit(x,b0,b1): return b0*x + b1入口文件:
import numpy as npimport regressionfrom matplotlib import pylab as pl# 定義訓(xùn)練數(shù)據(jù)x, y = regression.loadDataSet('data.txt')# 求取回歸方程b0, b1 = regression.fit(x,y)print('Line is:y = %2.0fx + %2.0f'%(b0,b1))# 預(yù)測x_test = np.array([1, 1.5, 2, 3, 4])y_test = np.zeros((1, len(x_test)))for i in range(len(x_test)): y_test[0][i] = regression.predit(x_test[i], b0, b1)# 繪制圖像xx = np.linspace(0, 5)yy = b0*xx + b1pl.plot(xx, yy, 'k-')pl.scatter(x, y, cmap=pl.cm.Paired)pl.scatter(x_test, y_test[0], cmap=pl.cm.Paired)pl.show()運行效果:
總結(jié)
以上是生活随笔為你收集整理的曲线 线性回归_机器学习笔记 线性回归的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: music算法原理_大话FMCW雷达之区
- 下一篇: 判断字符串_python判断字符串以什么