中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當前位置: 首頁 > news >正文

網(wǎng)站做的好的醫(yī)院google瀏覽器下載

網(wǎng)站做的好的醫(yī)院,google瀏覽器下載,建設(shè)部資質(zhì)網(wǎng)站查詢,網(wǎng)站關(guān)鍵詞沒有排名一. 線性回歸簡介 定義 線性回歸(Linear regression)是利用 回歸方程(函數(shù)) 對 一個或多個自變量(特征值)和因變量(目標值)之間 關(guān)系進行建模的一種分析方式。 回歸方程(函數(shù)) 一元線性回歸: y kx b > wx b k: 斜率, 在機器學習中叫 權(quán)重(weight), 簡稱: w b: 截距, 在機…

一. 線性回歸簡介

定義

線性回歸(Linear regression)是利用 回歸方程(函數(shù))一個或多個自變量(特征值)和因變量(目標值)之間 關(guān)系進行建模的一種分析方式。

回歸方程(函數(shù))

一元線性回歸: y = kx + b => wx + b k: 斜率, 在機器學習中叫 權(quán)重(weight), 簡稱: w b: 截距, 在機器學習中叫 偏差/偏置(bios), 簡稱: b

多元線性回歸: y = w1x1 + w2x2 + w3x3... + b => w轉(zhuǎn)置 * x + b

★線性回歸的分類

一元線性回歸

目標值只與一個因變量有關(guān)系

1個特征, 1個標簽

多元線性回歸

目標值只與多個因變量有關(guān)系

多個特征, 1個標簽

★應(yīng)用場景

有特征, 有標簽, 且標簽是 連續(xù)的

二. 線性回歸問題求解

線性回歸API

線性回歸API介紹

代碼演示
# 導(dǎo)包
from sklearn.linear_model import LinearRegression
?
?
# 1. 準備數(shù)據(jù)
# 訓練集數(shù)據(jù)
x_train = [[160], [166], [172], [174], [180]]
y_train = [56.3, 60.6, 65.1, 68.5, 75]
?
# 2. 創(chuàng)建 線性回歸 模型對象
estimator = LinearRegression()
?
# 3. 模型訓練
estimator.fit(x_train, y_train)
?
# 4. 模型評估(暫時略過)
?
# 5. 模型預(yù)測
# 查看模型參數(shù), 即: 斜率(權(quán)重) 和 截距(偏置)
print(f'斜率k(w): {estimator.coef_}') ? ? ? ? # [0.92942177]
print(f'截距b: {estimator.intercept_}') ? ?# -93.27346938775514
?
# 模型預(yù)測
x_test = [[176]]
y_predict = estimator.predict(x_test)
print(f'預(yù)測結(jié)果:{y_predict}') ? ? ? ? ?# [70.3047619]

★損失函數(shù)

求解最優(yōu) 斜率 和 截距(擬合結(jié)果)

誤差概念

用預(yù)測值y – 真實值y 就是 誤差

損失函數(shù)

衡量每個樣本預(yù)測值與真實值效果的函數(shù)

公式推導(dǎo)

損失函數(shù)分類

損失函數(shù): 用來衡量 預(yù)測值 和 真實值關(guān)系的, 分類如下:

  1. 最小二乘法:

    每個樣本的 預(yù)估值 - 真實值 的平方和

  2. 均方誤差(Mean Square Error => MSE):

    每個樣本的 預(yù)估值 - 真實值 的平方和 / 樣本數(shù)

  3. 平均絕對誤差(Mean Absolute Error => MAE)

    每個樣本的 預(yù)估值 - 真實值 的絕對值的 和 / 樣本數(shù)

線性回歸求解步驟

損失函數(shù)優(yōu)化方向, 即: 讓損失函數(shù)值最小 方式1: 梯度下降法. 方式2: 正規(guī)方程(求導(dǎo), 求偏導(dǎo))

復(fù)習-導(dǎo)數(shù)和矩陣

數(shù)據(jù)表述

導(dǎo)數(shù)

函數(shù)上某一個點的切線就是導(dǎo)數(shù), 瞬時速度變化率

基本公式
四則運算

復(fù)合函數(shù)求導(dǎo):

g(h)是外函數(shù)h(x)是內(nèi)函數(shù)。先對外函數(shù)求導(dǎo),再對內(nèi)函數(shù)求導(dǎo)

偏導(dǎo)

向量

向量范數(shù)

矩陣

正規(guī)方程法

只適用于線性回歸

一元線性回歸推導(dǎo)

多元線性回歸推導(dǎo)

★梯度下降算法

思想原理

輸入:初始化位置S;每步距離為a 。輸出:從位置S到達山底

步驟1:令初始化位置為山的任意位置S

步驟2:在當前位置環(huán)顧四周,如果四周都比S高返回S;否則執(zhí)行步驟3

步驟3: 在當前位置環(huán)顧四周,尋找坡度最陡的方向,令其為x方向

步驟4:沿著x方向往下走,長度為a,到達新的位置S'

步驟5:在S'位置環(huán)顧四周,如果四周都比S^‘高,則返回S^‘。否則轉(zhuǎn)到步驟3

梯度下降過程就和下山場景類似, 可微分的損失函數(shù),代表著一座山, 尋找的函數(shù)的最小值,也就是山底.

梯度 gradient grad

單變量函數(shù)中,梯度就是某一點切線斜率(某一點的導(dǎo)數(shù));有方向為函數(shù)增長最快的方向

多變量函數(shù)中,梯度就是某一個點的偏導(dǎo)數(shù);有方向:偏導(dǎo)數(shù)分量的向量方向

梯度下降公式

單變量

多變量

總結(jié)梯度下降

梯度下降案例-信貸

梯度下降算法分類

分類

優(yōu)缺點

正規(guī)方程梯度下降對比

三. 回歸模型的評估方法

★MAE-平均絕對誤差

MSE-均方誤差

★RMSE-均方根誤差

MAE 和 RMSE 接近, 都表明模型的誤差很低, MAE 或 RMSE 越小, 誤差越小

RMSE的計算公式中有一個平方項, 因此大的誤差將被平方, 因此會增加RMSE的值, 大多數(shù)情況下RMSE>MAE

RMSE會放大預(yù)測誤差較大的樣本對結(jié)果的影響,而MAE 只是給出了平均誤差

結(jié)論:RMSE > MAE都能反應(yīng)真實誤差,但是RMSE會對異常點更加敏感

四. 線性回歸API和案例

線性回歸API

正規(guī)方程

sklearn.linear_model.LinearRegression(fit_intercept=True)

通過正規(guī)方程優(yōu)化

參數(shù):fit_intercept,是否計算偏置

屬性:

LinearRegression.coef_ (回歸系數(shù))

LinearRegression.intercept_(偏置)

梯度下降

sklearn.linear_model.SGDRegressor(loss="squared_loss", fit_intercept=True, learning_rate ='constant', eta0=0.01)

SGDRegressor類實現(xiàn)了隨機梯度下降學習,它支持不同的損失函數(shù)和正則化懲罰項,來擬合線性回歸模型。

參數(shù)

loss(損失函數(shù)類型)eg:loss=”squared_loss

fit_intercept(是否計算偏置)

learning_rate (學習率策略):string, optional ,可以配置學習率隨著迭代次數(shù)不斷減小, 比如:學習率不斷變小策略: ‘invscaling’: eta = eta0 / pow(t, power_t=0.25)

eta0=0.01 (學習率的值)

屬性

SGDRegressor.coef_ (回歸系數(shù))SGDRegressor.intercept_ (偏置)

★波士頓房價預(yù)測

正規(guī)方程

from sklearn.preprocessing import StandardScaler ?# 特征處理
from sklearn.model_selection import train_test_split ?# 數(shù)據(jù)集劃分
from sklearn.linear_model import LinearRegression ?# 正規(guī)方程的回歸模型
from sklearn.linear_model import SGDRegressor ?# 梯度下降的回歸模型
from sklearn.metrics import mean_squared_error, mean_absolute_error, root_mean_squared_error ?# 均方誤差評估
from sklearn.linear_model import Ridge, RidgeCV
?
import pandas as pd
import numpy as np
?
# 1. 加載數(shù)據(jù)
# 數(shù)據(jù)地址
data_url = "http://lib.stat.cmu.edu/datasets/boston"
# pandas讀取數(shù)據(jù)
raw_df = pd.read_csv(data_url, sep="\\s+", skiprows=22, header=None)
# 獲取特征數(shù)據(jù)集
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
# 獲取標簽數(shù)據(jù)集
target = raw_df.values[1::2, 2]
?
# 2. 數(shù)據(jù)預(yù)處理: 把總數(shù)據(jù)506條 按8:2劃分
x_train, x_test, y_train, y_test = train_test_split(data, target,test_size=0.2,random_state=21
)
?
# 3. 特征工程: 特征預(yù)處理(標準化, 歸一化)
# 創(chuàng)建標準化對象
transfer = StandardScaler()
# 標準化訓練集
x_train = transfer.fit_transform(x_train)
# 標準化測試集
x_test = transfer.transform(x_test)
print(len(x_train), len(x_test))
?
# 4. 模型訓練
# 創(chuàng)建線性回歸模型對象 => 正規(guī)方程
estimator = LinearRegression(fit_intercept=True)
# 訓練模型
estimator.fit(x_train, y_train)
# 打印模型的 權(quán)重和偏置
print('權(quán)重', estimator.coef_)
print('偏置', estimator.intercept_)
?
# 5. 模型預(yù)測
y_predict = estimator.predict(x_test)
print(y_predict)
?
# 6. 模型評估
# 基于 預(yù)測值 和 真實值 計算 模型的 均方誤差
print(f'該模型的均方誤差: {mean_squared_error(y_test, y_predict)}')
print(f'該模型的平均絕對誤差: {mean_absolute_error(y_test, y_predict)}')
print(f'該模型的均方根誤差: {root_mean_squared_error(y_test, y_predict)}')

梯度下降

from sklearn.preprocessing import StandardScaler ?# 特征處理
from sklearn.model_selection import train_test_split ?# 數(shù)據(jù)集劃分
from sklearn.linear_model import LinearRegression ?# 正規(guī)方程的回歸模型
from sklearn.linear_model import SGDRegressor ?# 梯度下降的回歸模型
from sklearn.metrics import mean_squared_error, mean_absolute_error, root_mean_squared_error ?# 均方誤差, 平均絕對誤差, 均方根誤差評估
from sklearn.linear_model import Ridge, RidgeCV
?
import pandas as pd
import numpy as np
?
# 1. 加載數(shù)據(jù)
# 數(shù)據(jù)地址
data_url = "http://lib.stat.cmu.edu/datasets/boston"
# pandas讀取數(shù)據(jù)
raw_df = pd.read_csv(data_url, sep="\\s+", skiprows=22, header=None)
# 獲取特征數(shù)據(jù)集
data = np.hstack([raw_df.values[::2, :], raw_df.values[1::2, :2]])
# 獲取標簽數(shù)據(jù)集
target = raw_df.values[1::2, 2]
?
# 2. 數(shù)據(jù)預(yù)處理: 把總數(shù)據(jù)506條 按8:2劃分
x_train, x_test, y_train, y_test = train_test_split(data, target,test_size=0.2,random_state=21
)
?
# 3. 特征工程: 特征預(yù)處理(標準化, 歸一化)
# 創(chuàng)建標準化對象
transfer = StandardScaler()
# 標準化訓練集
x_train = transfer.fit_transform(x_train)
# 標準化測試集
x_test = transfer.transform(x_test)
print(len(x_train), len(x_test))
?
# 4. 模型訓練
# 創(chuàng)建線性回歸模型對象 => 梯度下降.
# 理解: 新的點 = 當前點 - 學習率 * 梯度(偏導(dǎo))
# estimator = LinearRegression(fit_intercept=True)  # 正規(guī)方程
# constant: 常量, 即: 學習率的值
# eta0: 學習率(梯度下降公式中的α)
# max_iter: 最大迭代次數(shù)
estimator = SGDRegressor(fit_intercept=True,learning_rate='constant',eta0=0.001,max_iter=1000000
)
# 訓練模型
estimator.fit(x_train, y_train)
# 打印模型的 權(quán)重和偏置
print('權(quán)重', estimator.coef_)
print('偏置', estimator.intercept_)
?
# 5. 模型預(yù)測
y_predict = estimator.predict(x_test)
print(y_predict)
?
# 6. 模型評估
# 基于 預(yù)測值 和 真實值 計算 模型的 均方誤差
print(f'該模型的均方誤差: {mean_squared_error(y_test, y_predict)}')
print(f'該模型的平均絕對誤差: {mean_absolute_error(y_test, y_predict)}')
print(f'該模型的均方根誤差: {root_mean_squared_error(y_test, y_predict)}')

五. 模型擬合問題

復(fù)習欠擬合與過擬合

欠擬合:模型在訓練集和測試集上表現(xiàn)都不好。模型過于簡單

正好擬合(泛化程度較高): 模型在訓練集, 測試集上表現(xiàn)效果都比較好.

過擬合:模型在訓練集上表現(xiàn)好,在測試集上表現(xiàn)不好。模型過于復(fù)雜

欠擬合在訓練集和測試集上的誤差都較大

過擬合在訓練集上誤差較小,而測試集上誤差較大

欠擬合

代碼

# 導(dǎo)包
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error ?# 計算均方誤差
from sklearn.linear_model import Ridge, Lasso
?
?
# 1. 定義函數(shù), 表示: 欠擬合.
def dm01_欠擬合():# 1. 準備數(shù)據(jù).# 準備噪聲(可以簡單理解為就是: 隨機種子), 噪聲相同, 每次生成的隨機數(shù)(點)相同.np.random.seed(21)# x: 表示特征, -3 ~ 3之間 隨機的小數(shù), 生成: 100個.x = np.random.uniform(-3, 3, size=100)# y: 表示標簽(目標值), 線性關(guān)系: y = 0.5x2 + x + 2 + 正態(tài)分布 +  噪聲.#  np.random.normal(0, 1, size=100) 意思是: 均值為0, 標準差為1, 生成100個.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)
?# 模型訓練.# 2. 創(chuàng)建 線性回歸-正規(guī)方程 模型對象.estimator = LinearRegression(fit_intercept=True) ?# 計算: 偏置.# 3. 對數(shù)據(jù)集做處理.X = x.reshape(-1, 1)# print(f'處理前 x => {x}') ? ?  # 假設(shè): x = [1, 2, 3]# print(f'處理后 X => {X}') ? ?  # 處理后: X = [[1], [2], [3]]# 4. 模型訓練.estimator.fit(X, y) ?# 這里傳的是, 處理后的x的值, 即: 二維數(shù)組.# 5. 模型預(yù)測.y_predict = estimator.predict(X)print(f'預(yù)測值為: {y_predict}')# 6. 模型評估.print(f'均方誤差: {mean_squared_error(y, y_predict)}') ?# 2.0683653437315512# 7. 數(shù)據(jù)可視化, 繪制圖像.plt.scatter(x, y) ?# 基于: 原始的x(特征), y值(真實值)繪制 散點圖.plt.plot(x, y_predict, c='r') ?# 基于: 原值的x(特征), y值(預(yù)測值)繪制 折線圖(就是我們的 擬合回歸線)plt.show()

結(jié)果

數(shù)據(jù)是拋物線=> 非線性, 用線性模型擬合, 模型過于簡單, 欠擬合

產(chǎn)生原因

學習到數(shù)據(jù)的特征過少

解決辦法

1)添加其他特征項,有時出現(xiàn)欠擬合是因為特征項不夠?qū)е碌?#xff0c;可以添加其他特征項來解決, 例如: “組合”、“泛化”、“相關(guān)性”三類特征是特征添加的重要手段

2)添加多項式特征,模型過于簡單時的常用套路,例如將線性模型通過添加二次項或三次項使模型泛化能力更強

正擬合

代碼

def dm02_正好擬合():# 1. 準備數(shù)據(jù).# 準備噪聲(可以簡單理解為就是: 隨機種子), 噪聲相同, 每次生成的隨機數(shù)(點)相同.np.random.seed(21)# x: 表示特征, -3 ~ 3之間 隨機的小數(shù), 生成: 100個.x = np.random.uniform(-3, 3, size=100)# y: 表示標簽(目標值), 線性關(guān)系: y = 0.5x2 + x + 2 + 正態(tài)分布 +  噪聲.#  np.random.normal(0, 1, size=100) 意思是: 均值為0, 標準差為1, 生成100個.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)
?# 模型訓練.# 2. 創(chuàng)建 線性回歸-正規(guī)方程 模型對象.estimator = LinearRegression(fit_intercept=True) ?# 計算: 偏置.# 3. 對數(shù)據(jù)集做處理.# 3.1 把數(shù)據(jù)從 一維數(shù)組 => 二維數(shù)組, 即: 從 [1, 2, 3] => [[1], [2], [3]]X = x.reshape(-1, 1)# 3.2 拼接: x 和 x的平方, 把數(shù)據(jù)從 [[1], [2], [3]] => [[1, 1], [2, 4], [3, 9]] ? 一元線性回歸 => 二元線性回歸X2 = np.hstack([X, X ** 2]) ?#print(f'處理前 x => {x}') ?# 假設(shè): x = [1, 2, 3]print(f'處理后 X => {X}') ?# 處理后: X = [[1], [2], [3]]print(f'處理后 X2 => {X2}') ?# 處理后: X2 = [[1, 1], [2, 4], [3, 9]]
?# 4. 模型訓練.estimator.fit(X2, y) ?# 這里傳的是, 處理后的x的值, 即: 二維數(shù)組 => 二元線性回歸# 5. 模型預(yù)測.y_predict = estimator.predict(X2)print(f'預(yù)測值為: {y_predict}')# 6. 模型評估.print(f'均方誤差: {mean_squared_error(y, y_predict)}') ?# 均方誤差: 1.0009503498374301# 7. 數(shù)據(jù)可視化, 繪制圖像.plt.scatter(x, y) ?# 基于: 原始的x(特征), y值(真實值)繪制 散點圖.
?# 細節(jié): 要對x的值進行升序排列, 然后再繪制, 否則會出現(xiàn): 散點沒有連貫性.# plt.plot(x, y_predict, c='r')  # 基于: 原值的x(特征), y值(預(yù)測值)繪制 折線圖(就是我們的 擬合回歸線)# np.sort(x): 按照x的值 升序排列.# np.argsort(x): 按照x的值 升序排列, 返回(x對應(yīng)的)索引值.plt.plot(np.sort(x), y_predict[np.argsort(x)], c='r') ?# 基于: 原值的x(特征), y值(預(yù)測值)繪制 折線圖(就是我們的 擬合回歸線)plt.show()

結(jié)果

數(shù)據(jù)是一元二次方程拋物線, 給模型的數(shù)據(jù), 增加x2項特征, 再用線性模型擬合, 模型結(jié)果正擬合

過擬合

代碼

def dm03_過擬合():# 1. 準備數(shù)據(jù).# 準備噪聲(可以簡單理解為就是: 隨機種子), 噪聲相同, 每次生成的隨機數(shù)(點)相同.np.random.seed(21)# x: 表示特征, -3 ~ 3之間 隨機的小數(shù), 生成: 100個.x = np.random.uniform(-3, 3, size=100)# y: 表示標簽(目標值), 線性關(guān)系: y = 0.5x2 + x + 2 + 正態(tài)分布 +  噪聲.#  np.random.normal(0, 1, size=100) 意思是: 均值為0, 標準差為1, 生成100個.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)
?# 模型訓練.# 2. 創(chuàng)建 線性回歸-正規(guī)方程 模型對象.estimator = LinearRegression(fit_intercept=True) ?# 計算: 偏置.# 3. 對數(shù)據(jù)集做處理.# 3.1 把數(shù)據(jù)從 一維數(shù)組 => 二維數(shù)組, 即: 從 [1, 2, 3] => [[1], [2], [3]]X = x.reshape(-1, 1)# 3.2 拼接: x, x的平方, x的立方, x的四次方..., 把數(shù)據(jù)從 [[1], [2], [3]] => [[1, 1....], [2, 4, 8, 16, 32, 64...], [3, 9, 27...]] ? 一元線性回歸 => 二元線性回歸X3 = np.hstack([X, X ** 2, X ** 3, X ** 4, X ** 5, X ** 6, X ** 7, X ** 8, X ** 9, X ** 10]) ?# 繼續(xù)增加 最高次項print(f'處理前 x => {x}') ?# 假設(shè): x = [1, 2, 3]print(f'處理后 X => {X}') ?# 處理后: X = [[1], [2], [3]]print(f'處理后 X2 => {X3}') ?# 處理后: X = [[1], [2], [3]]
?# 4. 模型訓練.estimator.fit(X3, y) ?# 這里傳的是, 處理后的x的值, 即: 二維數(shù)組 => 多元線性回歸# 5. 模型預(yù)測.y_predict = estimator.predict(X3)print(f'預(yù)測值為: {y_predict}')# 6. 模型評估.print(f'均方誤差: {mean_squared_error(y, y_predict)}') ?# 均方誤差: 0.9646255969834893# 7. 數(shù)據(jù)可視化, 繪制圖像.plt.scatter(x, y) ?# 基于: 原始的x(特征), y值(真實值)繪制 散點圖.
?# 細節(jié): 要對x的值進行升序排列, 然后再繪制, 否則會出現(xiàn): 散點沒有連貫性.# plt.plot(x, y_predict, c='r')  # 基于: 原值的x(特征), y值(預(yù)測值)繪制 折線圖(就是我們的 擬合回歸線)# np.sort(x): 按照x的值 升序排列.# np.argsort(x): 按照x的值 升序排列, 返回(x對應(yīng)的)索引值.plt.plot(np.sort(x), y_predict[np.argsort(x)], c='r') ?# 基于: 原值的x(特征), y值(預(yù)測值)繪制 折線圖(就是我們的 擬合回歸線)plt.show()

結(jié)果

數(shù)據(jù)是一元二次的, 特征值含有多個高次項, 模型過于復(fù)雜, 學習到臟數(shù)據(jù), 過擬合

產(chǎn)生原因

原始特征過多,存在一些嘈雜特征, 模型過于復(fù)雜是因為模型嘗試去兼顧所有測試樣本

解決辦法

1)重新清洗數(shù)據(jù)

導(dǎo)致過擬合的一個原因有可能是數(shù)據(jù)不純,如果出現(xiàn)了過擬合就需要重新清洗數(shù)據(jù)。

2)增大數(shù)據(jù)的訓練量

還有一個原因就是我們用于訓練的數(shù)據(jù)量太小導(dǎo)致的,訓練數(shù)據(jù)占總數(shù)據(jù)的比例過小。

3)正則化

4)減少特征維度

正則化

解釋正則化

在解決回歸過擬合中,我們選擇正則化。但是對于其他機器學習算法如分類算法來說也會出現(xiàn)這樣的問題,除了一些算法本身作用之外(決策樹、神經(jīng)網(wǎng)絡(luò)),我們更多的也是去自己做特征選擇,包括之前說的刪除、合并一些特征

在學習的時候,數(shù)據(jù)提供的特征有些影響模型復(fù)雜度或者這個特征的數(shù)據(jù)點異常較多,所以算法在學習的時候盡量減少這個特征的影響(甚至刪除某個特征的影響),這就是正則化

注:調(diào)整時候,算法并不知道某個特征影響,而是去調(diào)整參數(shù)得出優(yōu)化的結(jié)

★L1正則化

概念原理

L1正則化,在損失函數(shù)中添加L1正則化項

α 叫做懲罰系數(shù),該值越大則權(quán)重調(diào)整的幅度就越大,即:表示對特征權(quán)重懲罰力度就越大

L1 正則化會使得權(quán)重趨向于 0,甚至等于 0,使得某些特征失效,達到特征篩選的目的

代碼演示
# 4. 定義函數(shù), 表示: L1正則化 => 解決 過擬合問題的, 降低模型復(fù)雜度, 可能會使得權(quán)重變?yōu)? => 特征選取.
def dm04_L1正則化():# 1. 準備數(shù)據(jù).# 準備噪聲(可以簡單理解為就是: 隨機種子), 噪聲相同, 每次生成的隨機數(shù)(點)相同.np.random.seed(21)# x: 表示特征, -3 ~ 3之間 隨機的小數(shù), 生成: 100個.x = np.random.uniform(-3, 3, size=100)# y: 表示標簽(目標值), 線性關(guān)系: y = 0.5x2 + x + 2 + 正態(tài)分布 +  噪聲.#  np.random.normal(0, 1, size=100) 意思是: 均值為0, 標準差為1, 生成100個.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)
?# 模型訓練.# 2. 創(chuàng)建 線性回歸-正規(guī)方程 模型對象.# estimator = LinearRegression(fit_intercept=True) ?  # 計算: 偏置.# 2. 創(chuàng)建 線性回歸-L1正則化 模型對象.estimator = Lasso(alpha=0.1) ?# alpha: 正則化參數(shù), 其值越大, 則正則化程度越高, 即: 權(quán)重值越小, 則越容易被截斷為0.
?# 3. 對數(shù)據(jù)集做處理.# 3.1 把數(shù)據(jù)從 一維數(shù)組 => 二維數(shù)組, 即: 從 [1, 2, 3] => [[1], [2], [3]]X = x.reshape(-1, 1)# 3.2 拼接: x, x的平方, x的立方, x的四次方..., 把數(shù)據(jù)從 [[1], [2], [3]] => [[1, 1....], [2, 4, 8, 16, 32, 64...], [3, 9, 27...]] ? 一元線性回歸 => 二元線性回歸X3 = np.hstack([X, X ** 2, X ** 3, X ** 4, X ** 5, X ** 6, X ** 7, X ** 8, X ** 9, X ** 10]) ?# 繼續(xù)增加 最高次項print(f'處理前 x => {x}') ?# 假設(shè): x = [1, 2, 3]print(f'處理后 X => {X}') ?# 處理后: X = [[1], [2], [3]]print(f'處理后 X2 => {X3}') ?# 處理后: X = [[1], [2], [3]]
?# 4. 模型訓練.estimator.fit(X3, y) ?# 這里傳的是, 處理后的x的值, 即: 二維數(shù)組 => 多元線性回歸# 5. 模型預(yù)測.y_predict = estimator.predict(X3)print(f'預(yù)測值為: {y_predict}')# 6. 模型評估.print(f'均方誤差: {mean_squared_error(y, y_predict)}') ?# 均方誤差: 1.026270345364126# 7. 數(shù)據(jù)可視化, 繪制圖像.plt.scatter(x, y) ?# 基于: 原始的x(特征), y值(真實值)繪制 散點圖.
?# 細節(jié): 要對x的值進行升序排列, 然后再繪制, 否則會出現(xiàn): 散點沒有連貫性.# plt.plot(x, y_predict, c='r')  # 基于: 原值的x(特征), y值(預(yù)測值)繪制 折線圖(就是我們的 擬合回歸線)# np.sort(x): 按照x的值 升序排列.# np.argsort(x): 按照x的值 升序排列, 返回(x對應(yīng)的)索引值.plt.plot(np.sort(x), y_predict[np.argsort(x)], c='r') ?# 基于: 原值的x(特征), y值(預(yù)測值)繪制 折線圖(就是我們的 擬合回歸線)plt.show()
結(jié)果圖

Lasso回歸L1正則 會將高次方項系數(shù)變?yōu)?

★L2正則化

概念原理

L2正則化,在損失函數(shù)中添加L2正則化項

α 叫做懲罰系數(shù),該值越大則權(quán)重調(diào)整的幅度就越大,即:表示對特征權(quán)重懲罰力度就越大

L2 正則化會使得權(quán)重趨向于 0,一般不等于 0

代碼演示
# 5. 定義函數(shù), 表示: L2正則化 => 解決 過擬合問題的, 降低模型復(fù)雜度. 會使得權(quán)重趨向于0, 不會變?yōu)?.
def dm05_L2正則化():# 1. 準備數(shù)據(jù).# 準備噪聲(可以簡單理解為就是: 隨機種子), 噪聲相同, 每次生成的隨機數(shù)(點)相同.np.random.seed(21)# x: 表示特征, -3 ~ 3之間 隨機的小數(shù), 生成: 100個.x = np.random.uniform(-3, 3, size=100)# y: 表示標簽(目標值), 線性關(guān)系: y = 0.5x2 + x + 2 + 正態(tài)分布 +  噪聲.#  np.random.normal(0, 1, size=100) 意思是: 均值為0, 標準差為1, 生成100個.y = 0.5 * x ** 2 + x + 2 + np.random.normal(0, 1, size=100)
?# 模型訓練.# 2. 創(chuàng)建 線性回歸-正規(guī)方程 模型對象.# estimator = LinearRegression(fit_intercept=True) ?  # 計算: 偏置.# 2. 創(chuàng)建 線性回歸-L2正則化 模型對象.estimator = Ridge(alpha=0.1) ?# alpha: 正則化參數(shù), 其值越大, 則正則化程度越高, 即: 權(quán)重值越小, 則越容易被截斷為0.
?# 3. 對數(shù)據(jù)集做處理.# 3.1 把數(shù)據(jù)從 一維數(shù)組 => 二維數(shù)組, 即: 從 [1, 2, 3] => [[1], [2], [3]]X = x.reshape(-1, 1)# 3.2 拼接: x, x的平方, x的立方, x的四次方..., 把數(shù)據(jù)從 [[1], [2], [3]] => [[1, 1....], [2, 4, 8, 16, 32, 64...], [3, 9, 27...]] ? 一元線性回歸 => 二元線性回歸X3 = np.hstack([X, X ** 2, X ** 3, X ** 4, X ** 5, X ** 6, X ** 7, X ** 8, X ** 9, X ** 10]) ?# 繼續(xù)增加 最高次項print(f'處理前 x => {x}') ?# 假設(shè): x = [1, 2, 3]print(f'處理后 X => {X}') ?# 處理后: X = [[1], [2], [3]]print(f'處理后 X2 => {X3}') ?# 處理后: X = [[1], [2], [3]]
?# 4. 模型訓練.estimator.fit(X3, y) ?# 這里傳的是, 處理后的x的值, 即: 二維數(shù)組 => 多元線性回歸# 5. 模型預(yù)測.y_predict = estimator.predict(X3)print(f'預(yù)測值為: {y_predict}')# 6. 模型評估.print(f'均方誤差: {mean_squared_error(y, y_predict)}') ?# 均方誤差: 0.964988964298911# 7. 數(shù)據(jù)可視化, 繪制圖像.plt.scatter(x, y) ?# 基于: 原始的x(特征), y值(真實值)繪制 散點圖.
?# 細節(jié): 要對x的值進行升序排列, 然后再繪制, 否則會出現(xiàn): 散點沒有連貫性.# plt.plot(x, y_predict, c='r')  # 基于: 原值的x(特征), y值(預(yù)測值)繪制 折線圖(就是我們的 擬合回歸線)# np.sort(x): 按照x的值 升序排列.# np.argsort(x): 按照x的值 升序排列, 返回(x對應(yīng)的)索引值.plt.plot(np.sort(x), y_predict[np.argsort(x)], c='r') ?# 基于: 原值的x(特征), y值(預(yù)測值)繪制 折線圖(就是我們的 擬合回歸線)plt.show()
結(jié)果圖

Ridge線性回歸l2正則不會將系數(shù)變?yōu)? 但是對高次方項系數(shù)影響較大

L1與L2的區(qū)別

工程開發(fā)中L1、L2使用建議:一般傾向使用L2正則。

相同點

都可以降低模型的復(fù)雜度, 都可以解決: 過擬合問題.

不同點

L1正則化會使得特征的權(quán)重變?yōu)?, 一般適用于: 特征選取.L2正則化會使得特征的權(quán)重趨向于0, 不會變?yōu)榱? 可以解決 過擬合問題, 一般首選用 它.

http://www.risenshineclean.com/news/34721.html

相關(guān)文章:

  • 貿(mào)易公司做網(wǎng)站有優(yōu)勢嗎競價是什么意思
  • 網(wǎng)頁設(shè)計 傳統(tǒng)網(wǎng)站全網(wǎng)推廣代理
  • 河南企業(yè)網(wǎng)站制作wordpress免費建站
  • 網(wǎng)絡(luò)上建個網(wǎng)站買東西多少錢怎么找專業(yè)的營銷團隊
  • 網(wǎng)上購物系統(tǒng)源碼seo診斷a5
  • 視頻公司的網(wǎng)站設(shè)計模板網(wǎng)站建站公司
  • 如何對網(wǎng)站建設(shè)和維護企業(yè)策劃
  • 用織夢網(wǎng)站后臺發(fā)布文章為什么還需要審核谷歌下載安裝
  • 公司網(wǎng)站建設(shè)南寧百度競價收費標準
  • 房地產(chǎn)營銷網(wǎng)站建設(shè)新浪微指數(shù)
  • 鄭州中揚科技網(wǎng)站建設(shè)公司怎么樣網(wǎng)絡(luò)營銷方案ppt
  • 手機端網(wǎng)站建站品牌營銷案例分析
  • wordpress耗資源關(guān)閉深圳最好的外貿(mào)seo培訓
  • 安徽省建設(shè)廳網(wǎng)站域名容易被百度收錄的網(wǎng)站
  • 網(wǎng)站開發(fā)需求調(diào)研互動營銷案例100
  • 用vue做的網(wǎng)站模板seo網(wǎng)站推廣如何做
  • 江蘇中南建筑信息平臺搜索引擎seo優(yōu)化怎么做
  • 做網(wǎng)站合肥百度搜索推廣平臺
  • 做電商網(wǎng)站用什么框架電商平臺開發(fā)需要多少錢
  • 游戲網(wǎng)站怎么做推廣成人大學報名官網(wǎng)入口
  • 網(wǎng)站制作應(yīng)該注意到的問題seo有哪些優(yōu)缺點?
  • 營銷型網(wǎng)站建設(shè)公司價格經(jīng)典網(wǎng)絡(luò)營銷案例
  • openshift安裝wordpress密碼忘記百度seo關(guān)鍵詞報價
  • wordpress模板工作室佛山網(wǎng)絡(luò)公司 樂云seo
  • 服裝設(shè)計圖seo營銷推廣服務(wù)公司
  • 網(wǎng)站設(shè)計怎么做鏈接中國疫情最新消息
  • 做網(wǎng)站推廣的方法佛山關(guān)鍵詞排名效果
  • 食藥監(jiān)局網(wǎng)站建設(shè)方案濰坊網(wǎng)站seo
  • 90設(shè)計網(wǎng)站可以商用嗎學生班級優(yōu)化大師
  • 個人網(wǎng)站有什么缺點it人必看的網(wǎng)站