python機(jī)器學(xué)習(xí)之線性回歸詳解
一、python機(jī)器學(xué)習(xí)–線性回歸
線性回歸是最簡(jiǎn)單的機(jī)器學(xué)習(xí)模型,其形式簡(jiǎn)單,易于實(shí)現(xiàn),同時(shí)也是很多機(jī)器學(xué)習(xí)模型的基礎(chǔ)。
對(duì)于一個(gè)給定的訓(xùn)練集數(shù)據(jù),線性回歸的目的就是找到一個(gè)與這些數(shù)據(jù)最吻合的線性函數(shù)。
二、OLS線性回歸
2.1 Ordinary Least Squares 最小二乘法
一般情況下,線性回歸假設(shè)模型為下,其中w為模型參數(shù)
線性回歸模型通常使用MSE(均方誤差)作為損失函數(shù),假設(shè)有m個(gè)樣本,均方損失函數(shù)為:(所有實(shí)例預(yù)測(cè)值與實(shí)際值誤差平方的均值)
由于模型的訓(xùn)練目標(biāo)為找到使得損失函數(shù)最小化的w,經(jīng)過(guò)一系列變換解得使損失函數(shù)達(dá)到最小值的w為:
此時(shí)求得的w即為最優(yōu)模型參數(shù)
2.2 OLS線性回歸的代碼實(shí)現(xiàn)
#OLS線性回歸 import numpy as np import pandas as pd import seaborn as sns import matplotlib.pyplot as plt from sklearn.model_selection import train_test_split %matplotlib inline data = pd.DataFrame(pd.read_excel(r'C:/Users/15643/Desktop/附件1.xlsx')) feature_data = data.drop(['企業(yè)信譽(yù)評(píng)估'],axis=1) target_data = data['企業(yè)信譽(yù)評(píng)估'] X_train,X_test,y_train, y_test = train_test_split(feature_data, target_data, test_size=0.3) from statsmodels.formula.api import ols from statsmodels.sandbox.regression.predstd import wls_prediction_std df_train = pd.concat([X_train,y_train],axis=1) lr_model = ols("企業(yè)信譽(yù)評(píng)估~銷項(xiàng)季度均值+有效發(fā)票比例+是否違約+企業(yè)供求關(guān)系+行業(yè)信譽(yù)度+銷項(xiàng)季度標(biāo)準(zhǔn)差",data=df_train).fit() print(lr_model.summary()) # 預(yù)測(cè)測(cè)試集 lr_model.predict(X_test)
三、梯度下降算法
很多機(jī)器學(xué)習(xí)算法的最優(yōu)參數(shù)不能通過(guò)像最小二乘法那樣的“閉式”方程直接計(jì)算,此時(shí)需要使用迭代優(yōu)化方法。
梯度學(xué)習(xí)算法可被描述為:
(1)根據(jù)當(dāng)前參數(shù)w計(jì)算損失函數(shù)梯度∇J( w )
(2)沿著梯度反方向−∇J( w )調(diào)整w,調(diào)整的大小稱之為步長(zhǎng),由學(xué)習(xí)率η控制w:= w−η∇J( w )
(3)反復(fù)執(zhí)行該過(guò)程,直到梯度為0或損失函數(shù)降低小于閾值,此時(shí)稱算法收斂。
3.1 GDLinearRegression代碼實(shí)現(xiàn)
from linear_regression import GDLinearRegression gd_lr = GDLinearRegression(n_iter=3000,eta=0.001,tol=0.00001) #梯度下降最大迭代次數(shù)n_iter #學(xué)習(xí)率eta #損失降低閾值tol
四、多項(xiàng)式回歸分析
多項(xiàng)式回歸是研究一個(gè)因變量與一個(gè)或者多個(gè)自變量間多項(xiàng)式的回歸分析方法。
多項(xiàng)式回歸模型方程式如下:
hθ(x)=θ0+θ1x+θ2x2+...+θmxm
簡(jiǎn)單來(lái)說(shuō)就是在階數(shù)=k的情況下將每一個(gè)特征轉(zhuǎn)換為一個(gè)k階的多項(xiàng)式,這些多項(xiàng)式共同構(gòu)成了一個(gè)矩陣,將這個(gè)矩陣看作一個(gè)特征,由此多項(xiàng)式回歸模型就轉(zhuǎn)變成了簡(jiǎn)單的線性回歸。以下為特征x的多項(xiàng)式轉(zhuǎn)變:
x−>[1,x,x2,x3...xk]
4.1 多項(xiàng)式回歸的代碼實(shí)現(xiàn)
python的多項(xiàng)式回歸需要導(dǎo)入PolynomialFeatures類實(shí)現(xiàn)
#scikit-learn 多項(xiàng)式擬合(多元多項(xiàng)式回歸) #PolynomialFeatures和linear_model的組合 (線性擬合非線性) #[x1,x2,x3]==[[1,x1,x1**2],[1,x2,x2**2],[1,x3,x3**2]] import numpy as np import matplotlib.pyplot as plt from sklearn.preprocessing import PolynomialFeatures from sklearn.linear_model import LinearRegression,Perceptron from sklearn.metrics import mean_squared_error,r2_score from sklearn.model_selection import train_test_split target = std_df_female['總分'] data_complete_ = std_df_female.loc[:,['1000/800','50m','立定跳遠(yuǎn)','引仰']] x_train, x_test, y_train, y_test = train_test_split(data_complete_,target, test_size=0.3) # 多項(xiàng)式擬合 poly_reg =PolynomialFeatures(degree=2) x_train_poly = poly_reg.fit_transform(x_train) model = LinearRegression() model.fit(x_train_poly, y_train) #print(poly_reg.coef_,poly_reg.intercept_) #系數(shù)及常數(shù) # 測(cè)試集比較 x_test_poly = poly_reg.fit_transform(x_test) y_test_pred = model.predict(x_test_poly) #mean_squared_error(y_true, y_pred) #均方誤差回歸損失,越小越好。 mse = np.sqrt(mean_squared_error(y_test, y_test_pred)) # r2 范圍[0,1],R2越接近1擬合越好。 r2 = r2_score(y_test, y_test_pred) print(r2)
到此這篇關(guān)于python機(jī)器學(xué)習(xí)之線性回歸詳解的文章就介紹到這了,更多相關(guān)python線性回歸內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
pytorch中LN(LayerNorm)及Relu和其變相的輸出操作
這篇文章主要介紹了pytorch中LN(LayerNorm)及Relu和其變相的輸出操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-05-05Python實(shí)現(xiàn)多項(xiàng)式擬合正弦函數(shù)詳情
這篇文章主要介紹了Python實(shí)現(xiàn)多項(xiàng)式擬合正弦函數(shù)詳情,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-08-08torch.optim優(yōu)化算法理解之optim.Adam()解讀
這篇文章主要介紹了torch.optim優(yōu)化算法理解之optim.Adam()解讀,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11簡(jiǎn)單談?wù)凱ython中的幾種常見(jiàn)的數(shù)據(jù)類型
Python 中的變量不需要聲明。每個(gè)變量在使用前都必須賦值,變量賦值以后該變量才會(huì)被創(chuàng)建。在 Python 中,變量就是變量,它沒(méi)有類型,我們所說(shuō)的"類型"是變量所指的內(nèi)存中對(duì)象的類型。2017-02-02Python利用matplotlib.pyplot.boxplot()繪制箱型圖實(shí)例代碼
相信大家應(yīng)該都知道Python繪制箱線圖主要用matplotlib庫(kù)里pyplot模塊里的boxplot()函數(shù),下面這篇文章主要給大家介紹了關(guān)于Python利用matplotlib.pyplot.boxplot()繪制箱型圖的相關(guān)資料,需要的朋友可以參考下2022-08-08詳細(xì)分析Python collections工具庫(kù)
這篇文章主要介紹了詳解Python collections工具庫(kù)的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07Pycharm中運(yùn)行程序在Python?console中執(zhí)行,不是直接Run問(wèn)題
這篇文章主要介紹了Pycharm中運(yùn)行程序在Python?console中執(zhí)行,不是直接Run問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-07-07Python保存dict字典類型數(shù)據(jù)到Mysql并自動(dòng)創(chuàng)建表與列
這篇文章主要介紹了Python保存dict字典類型數(shù)據(jù)到Mysql并自動(dòng)創(chuàng)建表與列,字典是另一種可變?nèi)萜髂P停铱纱鎯?chǔ)任意類型對(duì)象,想了解更多內(nèi)容的小伙伴可以和小編一起進(jìn)入下面文章學(xué)習(xí)更多內(nèi)容,希望對(duì)你有所幫助2022-02-02