機器學習基礎DAY8

2021-10-12 05:00:39 字數 3065 閱讀 7724

第八章 線性回歸

先從定義說起:

誤差大小:

######sklearn線性回歸正規方程、梯度下降api:

sklearn.linear_model.linearregression

正規方程

普通最小二乘線性回歸

coef_:回歸係數

sklearn.linear_model.sgdregressor

梯度下降

通過使用sgd最小化線性模型

coef_:回歸係數

回歸效能評估:mse

兩種方法的比較:

特點:線性回歸器是最為簡單、易用的回歸模型。從某種程度上限制了使用,儘管如此,在不知道特徵之間關係的前提下,我們仍然使用線性回歸器作為大多數系統的首要選擇。

小規模資料:linearregression(不能解決擬合問題)以及其它

大規模資料:sgdregressor

過擬合與欠擬合:

過擬合:乙個假設在訓練資料上能夠獲得比其他假設更好的擬合, 但是在訓練資料外的資料集上卻不能很好地擬合資料,此時認為這個假設出現了過擬合的現象。(模型過於複雜)

過擬合原因以及解決辦法:

原因:原始特徵過多,存在一些嘈雜特徵, 模型過於複雜是因為模型嘗試去兼顧各個測試資料點

解決辦法:

進行特徵選擇,消除關聯性大的特徵(很難做)

交叉驗證(讓所有資料都有過訓練)

正則化(了解)

欠擬合:乙個假設在訓練資料上不能獲得更好的擬合, 但是在訓練資料外的資料集上也不能很好地擬合資料,此時認為這個假設出現了欠擬合的現象。(模型過於簡單)

欠擬合原因以及解決辦法:

原因:學習到資料的特徵過少

解決辦法:

增加資料的特徵數量

作用:可以使得w的每個元素都很小,都接近於0

優點:越小的引數說明模型越簡單,越簡單的模型則越不容易產生過擬合現象

######帶有正則化的線性回歸-ridge:sklearn.linear_model.ridge

sklearn.linear_model.ridge(alpha=1.0)

具有l2正則化的線性最小二乘法

alpha:正則化力度

coef_:回歸係數

線性回歸 linearregression與ridge對比:

嶺回歸:回歸得到的回歸係數更符合實際,更可靠。另外,能讓估計引數的波動範圍變小,變的更穩定。在存在病態資料偏多的研究中有較大的實用價值。

def mylinear(

): ""

" 線性回歸直接**房子**

:return: none

"""#獲取資料

lb=load_boston(

)#分割資料

x_train,x_test,y_train,y_test =train_test_split(lb.data,lb.target,test_size=0.25)

print(y_train,y_test)

#特徵值和目標值都需要標準化處理

std_x=standardscaler(

) x_train=std_x.fit_transform(x_train)

x_test=std_x.transform(x_test)

std_y = standardscaler(

) y_train = std_y.fit_transform(y_train.reshape(-1,1))

y_test = std_y.transform(y_test.reshape(-1,1))

#estimator**

#正規方程求解

lr =linearregression(

) lr.fit(x_train,y_train)

print(lr.coef_)

#****

y_predict=std_y.inverse_transform(lr.predict(x_test))

print(

"測試結果:",y_predict)

print(

"正規方程的均方誤差:", mean_squared_error(std_y.inverse_transform(y_test), y_predict))

#sgd求解

sgd = sgdregressor(

) sgd.fit(x_train, y_train)

print(sgd.coef_)

# ****

y_predict = std_y.inverse_transform(sgd.predict(x_test))

print(

"測試結果:", y_predict)

print(

"sgd的均方誤差:", mean_squared_error(std_y.inverse_transform(y_test), y_predict))

# rideg求解

rid = ridge(alpha=1.0)

rid.fit(x_train, y_train)

print(rid.coef_)

# ****

y_predict = std_y.inverse_transform(rid.predict(x_test))

print(

"測試結果:", y_predict)

print(

"嶺回歸的均方誤差:", mean_squared_error(std_y.inverse_transform(y_test), y_predict))

return none

if __name__==

"__main__"

: mylinear(

)

DAY8學習筆記

檔案操作的基本概念 開啟檔案的模式有三種純淨模式 r 預設的 w a。控制操作檔案內容格式的兩種模式 t 預設的 b。大前提 tb模式均不能單獨使用,必須與純淨模式結合使用。t文字模式 1.讀寫檔案都是以字串為單位的。2.只能針對文字檔案。3.必須指定encoding引數。b二進位制模式 1.讀寫檔...

C 程式設計基礎DAY8

編寫乙個函式,確定乙個正數是否為完全數 乙個數,等於他的因子之和 用這個函式確定和列印1到1000之間的所有完全數。include include using namespace std intgetfullnumber if sum i sum 0 return0 int main 寫一函式,求斐...

遊戲程式設計基礎day8

rect類擁有的方法clamp 將矩形移動到另乙個矩形當中 move x,y 移動矩形 xy 支援數字型別 使用方法跟屬性 目的 為了簡便我們對圖形進行操作第乙個小遊戲 動感火車 import pygame import time import math pygame.init screen obj...