欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

sklearn+python:線性回歸案例

 更新時間:2020年02月24日 10:40:49   作者:yuanlulu  
今天小編就為大家分享一篇sklearn+python:線性回歸案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

使用一階線性方程預(yù)測波士頓房價

載入的數(shù)據(jù)是隨sklearn一起發(fā)布的,來自boston 1993年之前收集的506個房屋的數(shù)據(jù)和價格。load_boston()用于載入數(shù)據(jù)。

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
import time
from sklearn.linear_model import LinearRegression


boston = load_boston()

X = boston.data
y = boston.target

print("X.shape:{}. y.shape:{}".format(X.shape, y.shape))
print('boston.feature_name:{}'.format(boston.feature_names))

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=3)

model = LinearRegression()

start = time.clock()
model.fit(X_train, y_train)

train_score = model.score(X_train, y_train)
cv_score = model.score(X_test, y_test)

print('time used:{0:.6f}; train_score:{1:.6f}, sv_score:{2:.6f}'.format((time.clock()-start),
                                    train_score, cv_score))

輸出內(nèi)容為:

X.shape:(506, 13). y.shape:(506,)
boston.feature_name:['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 'B' 'LSTAT']
time used:0.012403; train_score:0.723941, sv_score:0.794958

可以看到測試集上準(zhǔn)確率并不高,應(yīng)該是欠擬合。

使用多項(xiàng)式做線性回歸

上面的例子是欠擬合的,說明模型太簡單,無法擬合數(shù)據(jù)的情況。現(xiàn)在增加模型復(fù)雜度,引入多項(xiàng)式。

打個比方,如果原來的特征是[a, b]兩個特征,

在degree為2的情況下, 多項(xiàng)式特征變?yōu)閇1, a, b, a^2, ab, b^2]。degree為其它值的情況依次類推。

多項(xiàng)式特征相當(dāng)于增加了數(shù)據(jù)和模型的復(fù)雜性,能夠更好的擬合。

下面的代碼使用Pipeline把多項(xiàng)式特征和線性回歸特征連起來,最終測試degree在1、2、3的情況下的得分。

from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split
import time
from sklearn.linear_model import LinearRegression
from sklearn.preprocessing import PolynomialFeatures
from sklearn.pipeline import Pipeline

def polynomial_model(degree=1):
  polynomial_features = PolynomialFeatures(degree=degree, include_bias=False)

  linear_regression = LinearRegression(normalize=True)
  pipeline = Pipeline([('polynomial_features', polynomial_features),
             ('linear_regression', linear_regression)])
  return pipeline

boston = load_boston()
X = boston.data
y = boston.target
print("X.shape:{}. y.shape:{}".format(X.shape, y.shape))
print('boston.feature_name:{}'.format(boston.feature_names))

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=3)

for i in range(1,4):
  print( 'degree:{}'.format( i ) )
  model = polynomial_model(degree=i)

  start = time.clock()
  model.fit(X_train, y_train)

  train_score = model.score(X_train, y_train)
  cv_score = model.score(X_test, y_test)

  print('time used:{0:.6f}; train_score:{1:.6f}, sv_score:{2:.6f}'.format((time.clock()-start),
                                    train_score, cv_score))

輸出結(jié)果為:

X.shape:(506, 13). y.shape:(506,)
boston.feature_name:['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO'
 'B' 'LSTAT']
degree:1
time used:0.003576; train_score:0.723941, sv_score:0.794958
degree:2
time used:0.030123; train_score:0.930547, sv_score:0.860465
degree:3
time used:0.137346; train_score:1.000000, sv_score:-104.429619

可以看到degree為1和上面不使用多項(xiàng)式是一樣的。degree為3在訓(xùn)練集上的得分為1,在測試集上得分是負(fù)數(shù),明顯過擬合了。

所以最終應(yīng)該選擇degree為2的模型。

二階多項(xiàng)式比一階多項(xiàng)式好的多,但是測試集和訓(xùn)練集上的得分仍有不少差距,這可能是數(shù)據(jù)不夠的原因,需要更多的訊據(jù)才能進(jìn)一步提高模型的準(zhǔn)確度。

正規(guī)方程解法和梯度下降的比較

除了梯度下降法來逼近最優(yōu)解,也可以使用正規(guī)的方程解法直接計算出最終的解來。

根據(jù)吳恩達(dá)的課程,線性回歸最優(yōu)解為:

theta = (X^T * X)^-1 * X^T * y

其實(shí)兩種方法各有優(yōu)缺點(diǎn):

梯度下降法:

缺點(diǎn):需要選擇學(xué)習(xí)率,需要多次迭代

優(yōu)點(diǎn):特征值很多(1萬以上)時仍然能以不錯的速度工作

正規(guī)方程解法:

優(yōu)點(diǎn):不需要設(shè)置學(xué)習(xí)率,不需要多次迭代

缺點(diǎn):需要計算X的轉(zhuǎn)置和逆,復(fù)雜度O3;特征值很多(1萬以上)時特變慢

在分類等非線性計算中,正規(guī)方程解法并不適用,所以梯度下降法適用范圍更廣。

以上這篇sklearn+python:線性回歸案例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 分享python?寫?csv?文件的兩種方法

    分享python?寫?csv?文件的兩種方法

    這篇文章主要向大家分享的是python?寫?csv?文件的兩種方法,具體要怎么將內(nèi)容寫入csv文件呢?下面文章我們將使用csv和pandas的方法實(shí)現(xiàn),下文詳細(xì)實(shí)現(xiàn)介紹需要的小伙伴可以參考一下
    2022-04-04
  • python爬蟲---requests庫的用法詳解

    python爬蟲---requests庫的用法詳解

    requests是python實(shí)現(xiàn)的簡單易用的HTTP庫,使用起來比urllib簡潔很多,這里就為大家分享一下
    2020-09-09
  • Python的垃圾回收機(jī)制深入分析

    Python的垃圾回收機(jī)制深入分析

    這篇文章主要介紹了Python的垃圾回收機(jī)制,有助于深入的理解Python的內(nèi)存分配與回收機(jī)制,需要的朋友可以參考下
    2014-07-07
  • python numpy中setdiff1d的用法說明

    python numpy中setdiff1d的用法說明

    這篇文章主要介紹了python numpy中setdiff1d的用法說明,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-04-04
  • python趣味挑戰(zhàn)之爬取天氣與微博熱搜并自動發(fā)給微信好友

    python趣味挑戰(zhàn)之爬取天氣與微博熱搜并自動發(fā)給微信好友

    忙著畢設(shè)與打游戲之余,突然想著寫個爬蟲練練手,想了想,就寫了一個爬蟲爬取“中國天氣網(wǎng)”與“微博熱搜”并定時發(fā)送給微信好友,放到服務(wù)器上運(yùn)行了幾天算是正常,需要的朋友可以參考下
    2021-05-05
  • python??UPX?is?not?available問題解決方法

    python??UPX?is?not?available問題解決方法

    這篇文章主要介紹了python?UPX?is?not?available問題解決,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 本機(jī)安裝PaddlePaddle安裝指南及步驟詳解

    本機(jī)安裝PaddlePaddle安裝指南及步驟詳解

    PaddlePaddle是百度研發(fā)的開源開放的深度學(xué)習(xí)平臺,有全面的官方支持的工業(yè)級應(yīng)用模型,涵蓋自然語言處理、計算機(jī)視覺、推薦引擎等多個領(lǐng)域,并開放多個領(lǐng)先的預(yù)訓(xùn)練中文模型。這篇文章主要介紹了本機(jī)安裝PaddlePaddle安裝指南,需要的朋友可以參考下
    2021-12-12
  • Python格式化字符串的案例方法

    Python格式化字符串的案例方法

    在編寫程序的過程中,經(jīng)常需要進(jìn)行格式化輸出,每次用每次查,干脆就在這里整理一下,下面這篇文章主要給大家介紹了關(guān)于python字符串格式化的相關(guān)資料,分別是%格式符和format方式,需要的朋友可以參考下
    2022-03-03
  • Python+Selenium+phantomjs實(shí)現(xiàn)網(wǎng)頁模擬登錄和截圖功能(windows環(huán)境)

    Python+Selenium+phantomjs實(shí)現(xiàn)網(wǎng)頁模擬登錄和截圖功能(windows環(huán)境)

    Python是一種跨平臺的計算機(jī)程序設(shè)計語言,它可以運(yùn)行在Windows、Mac和各種Linux/Unix系統(tǒng)上。這篇文章主要介紹了Python+Selenium+phantomjs實(shí)現(xiàn)網(wǎng)頁模擬登錄和截圖功能,需要的朋友可以參考下
    2019-12-12
  • django實(shí)現(xiàn)日志按日期分割

    django實(shí)現(xiàn)日志按日期分割

    這篇文章主要介紹了django實(shí)現(xiàn)日志按日期分割,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05

最新評論