演算法之線性回歸

2021-08-21 00:10:27 字數 3054 閱讀 3098

一、普通線性回歸

原理:分類的目標變數是標稱型資料,而回歸將會對連續型的資料做出**。

應當怎樣從一大堆資料裡求出回歸方程呢?

假定輸人資料存放在矩陣x中,而回歸係數存放在向量w中。那麼對於給定的資料x1, **結果將會通過

y=x*w

給出。現在的問題是,手裡有一些x和對應的y,怎樣才能找到w呢?

乙個常用的方法就是找出使誤差最小的w。這裡的誤差是指**y值和真實y值之間的差值,使用該誤差的簡單累加將使得正差值和負差值相互抵消,所以我 們採用平方誤差。

例項步驟

1. 匯入庫函式:from sklearn.linear_model import linearregression

import sklearn.datasets as datasets

import numpy as np

2.引入糖尿病資料 : data = datasets.load_diabetes()

3. 抽取特徵和標籤:dia_data = data.data

target = data.target

dia_data.shape,target.shape

4.建立演算法模型:lgr = linearregression()

5.對資料進行切分:from sklearn.model_selection import train_test_split

x_train,x_test,y_train,y_test = train_test_split(dia_data,target,test_size=0.1)

6.對資料進行訓練: lgr.fit(x_train,y_train)

7.**:lgr.predict(x_test[::4])  注:這裡對測試資料每隔4個取一次    同理y_test[::4]

8.對資料進行評測:lgr.score(x_test,y_test)

二、嶺回歸

1、原理:如果資料的特徵比樣本點還多應該怎麼辦?是否還可以使用線性回歸和之前的方法來做**?

答案是否定的,即不能再使用前面介紹的方法。這是因為輸入資料的矩陣x不是滿秩矩陣。非滿秩矩陣在求逆時會出現問題。

為了解決這個問題,統計學家引入了嶺回歸(ridge regression)的概念

【注意】在嶺回歸裡面,決定回歸模型效能的除了資料演算法以外,還有乙個縮減值lambda*i 

嶺回歸是加了二階正則項(lambda*i)的最小二乘,主要適用於過擬合嚴重或各變數之間存在多重共線性的時候,嶺回歸是有bias的,這裡的bias是為了讓variance更小。

歸納總結

1.嶺回歸可以解決特徵數量比樣本量多的問題

2.嶺回歸作為一種縮減演算法可以判斷哪些特徵重要或者不重要,有點類似於降維的效果

3.縮減演算法可以看作是對乙個模型增加偏差的同時減少方差

嶺回歸用於處理下面兩類問題:

1.資料點少於變數個數

2.變數間存在共線性(最小二乘回歸得到的係數不穩定,方差很大)

例項步驟(嶺回歸一般用在樣本值不夠的時候):

axes.set_xscale("log")

三.lasso回歸

例項:普通線性回歸、嶺回歸與lasso回歸比較

1.匯入包:from sklearn.linear_model import linearregression,ridge,lasso

2.使用numpy建立資料x,建立係數,對係數進行處理,對部分係數進行歸零化操作,然後根據係數進行矩陣操作求得目標值

增加雜訊:

x_train = np.random.randn(50,200)

x_train

3. 建立一些回歸係數:

coef = np.random.randn(200)

coef

隨機把回歸係數中的190個設定為0

index = np.arange(200)

np.random.shuffle(index)

coef[index[:190]] = 0

coef

y_train = np.dot(x_train,coef)

y_train

4. 對以上建立好的符合現行回歸資料,加一些雜訊

y_train += 0.01*np.random.normal(200)

y_train

5.訓練與測試資料:

x_train,x_test,y_train,y_test = train_test_split(x_train,y_train,test_size=0.3)

6.分別使用線性回歸,嶺回歸,lasso回歸進行資料**:

lgr = linearregression()

lgr.fit(x_train,y_train)

lgr.score(x_test,y_test) 

7.建立物件:rg = ridge(0.01)

rg.fit(x_train,y_train)

rg.score(x_test,y_test)

8.建立lasso物件:ls = lasso(0.01)

ls.fit(x_train,y_train)

ls.score(x_test,y_test)

9.資料檢視,此處獲取各個演算法的訓練資料的coef_:係數

plt.figure(figsize=(12,9))

axes1 = plt.subplot(221)

axes1.plot(coef)

axes1.set_title("true")

axes2 = plt.subplot(222)

axes2.plot(lgr.coef_)

axes2.set_title("linear")

axes3 = plt.subplot(223)

axes3.plot(rg.coef_)

axes3.set_title("rigde")

axes4 = plt.subplot(224)

axes4.plot(ls.coef_)

axes4.set_title("lasso")

回歸演算法之線性回歸

線性回歸的定義是 目標值預期是輸入變數的線性組合。線性模型形式簡單 易於建模,但卻蘊含著機器學習中一些重要的基本思想。線性回歸,是利用數理統計中回歸分析,來確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法,運用十分廣泛。優點 結果易於理解,計算不複雜 缺點 對非線性的資料擬合不好 適用資...

演算法梳理之線性回歸

線性回歸模型作為演算法梳理的第乙個模型,也是機器學習中最為基礎與容易理解的模型,在各個機器學習的書籍與教程中也是作為機器學習的引例。線性回歸的資料集的形式為多個屬性x與乙個對應的y,目的是求解x與y之間的線性對映關係,優化求解引數的目標是降低 值與y之間的差別,差別 的度量方式有很多種 如均方誤差,...

線性回歸演算法

1 有監督學習 supervised learning 不僅把訓練資料丟給計算機,而且還把分類的結果 資料具有的標籤 也一併丟給計算機分析。計算機進行學習之後,再丟給它新的未知的資料,它也能計算出該資料導致各種結果的概率,給你乙個最接近正確的結果。由於計算機在學習的過程中不僅有訓練資料,而且有訓練結...