日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

曲线 线性回归_机器学习笔记 线性回归

發布時間:2025/3/21 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 曲线 线性回归_机器学习笔记 线性回归 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、線性回歸找到最佳擬合直線

1. 定義

線性回歸是通過現有數據,讓訓練模型生成一個擬合公式,從而計算目標數據的預測值。

在統計學中,線性回歸(Linear Regression)是利用稱為“線性回歸方程”的最小二乘函數對一個或多個自變量和因變量之間關系進行建模的一種回歸分析。

這種函數是一個或多個稱為回歸系數的模型參數的線性組合。

  • 只有一個自變量的情況稱為簡單回歸大于一個自變量情況的叫做多元回歸。

一個帶有一個自變量的線性回歸方程代表一條直線。我們需要對線性回歸結果進行統計分析。

線性回歸利用數理統計中回歸分析,來確定兩種或兩種以上變量間相互依賴的定量關系的一種統計方法運用十分廣泛。其表達形式為y=x’x+e,e為誤差服從均值為 θ 的正態分布。

線性回歸假設物證和結果滿足線性關系。其實線性關系的表達能力非常強大,每個特征對結果的影響強弱可以由前面的參數體現,而且每個特征變量可以首先映射到一個函數,然后再參與線性計算。這樣就可以表達特征與結果之間的非線性關系。

回歸屬于有監督學習中的一種方法。該方法的核心思想是從連續型統計數據中得到數學模型,然后將該數學模型用于預測或者分類。

該方法處理的數據可以是多維的。

2. 回歸與梯度下降

回歸在數學上來說是給定一個點集,能夠用一條曲線去擬合之。

如果這個曲線是一條直線,那就被稱為線性回歸;

如果曲線是一條二次曲線,就被稱為二次回歸。

回歸還有很多變種,如:locally weighted 回歸、logistic回歸等。

舉例,weka,做一個房屋價值的評估系統。相關變量可能有:

  • 面積房間數量地段朝向

等。

這些影響房屋價值的變量被稱為特征(feature)。

為簡單起見,假設我們的房屋feature只有一個——房屋的面積。

準備數據如下:

面積(m^2)銷售價錢(萬元)12325015032087160102220……

x軸表示面積,y表示售價,則出來一個圖:

如果再給定一個面積,要計算售價,可以用一條曲線去盡量擬合這些數據。

一些概念

  • 房屋銷售記錄表 - 訓練集(training set)或者訓練數據(training data),是我們流程中輸入數據,一般稱為x房屋銷售價格 - 輸出數據,一般稱為y擬合的函數(或者稱為假設、模型),一般寫做y=h(x)訓練數據的條目數(#training set),一條訓練數據是由一對輸入數據和輸出數據組成的。輸入數據的維度(特征的個數,#features),n

典型的機器學習的過程

我們用X1,X2...Xn去描述feature里面的分量,比如x1=面積,x2=朝向等等,可以做出一個估計函數:

θ 稱為參數,在這兒的意思是調整feature中每個分量的影響力,就是到底是房屋的面積更重要兩袖清風是房屋的地段更重要。如果令X0=1,就可以用向量的方式來表示了:

我們程序也需要一個機制去評估θ是否比較好,所以說需要對?函數進行評估,一般這個函數稱為損失函數(loss function)或者錯誤函數(error function),描述?函數不好的程度。在下面,做出一個錯誤函數:

這個錯誤估計函數是去對x(i)的估計值與真實值y(i)差的平方和作為錯誤估計函數,前面乘上1/2是為了在求導的時候,這個系數就不見了。

如何調整θ以使得J(θ)取得最小值有很多方法,其中有最小二乘法(min square),是一種完全是數學描述的方法,在stanford機器學習開放課最后的部分會推導最小二乘法的公式的來源,這個來很多的機器學習和數學書上都可以找到,下面介紹梯度下降法。

3. 梯度下降法

梯度下降法是按下面的流程來進行的:

  • 首先對θ賦值,這個值可以是隨機的,也可以讓θ是一個全零的向量改變θ的值,使得J(θ)按梯度下降的方向進行減少。
  • 4. 回歸的一般方法

  • 收集數據準備數據分析數據訓練算法測試算法使用算法
  • 二、Python實現線性回歸示例

    代碼地址

    核心代碼:

    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# 回歸方程求取函數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# 定義預測函數def predit(x,b0,b1): return b0*x + b1

    入口文件:

    import numpy as npimport regressionfrom matplotlib import pylab as pl# 定義訓練數據x, y = regression.loadDataSet('data.txt')# 求取回歸方程b0, b1 = regression.fit(x,y)print('Line is:y = %2.0fx + %2.0f'%(b0,b1))# 預測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()

    運行效果:

    總結

    以上是生活随笔為你收集整理的曲线 线性回归_机器学习笔记 线性回归的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。