主頁 > 知識庫 > python深度總結(jié)線性回歸

python深度總結(jié)線性回歸

熱門標簽:呼叫中心市場需求 網(wǎng)站文章發(fā)布 銀行業(yè)務(wù) 鐵路電話系統(tǒng) 服務(wù)器配置 智能手機 檢查注冊表項 美圖手機

概述

線性回歸的定義是: 目標值預期是輸入變量的線性組合. 線性模型形式簡單, 易于建模, 但卻蘊含著機器學習中一些重要的基本思想. 線性回歸, 是利用數(shù)理統(tǒng)計中回歸分析, 來確定兩種或兩種以上變量間相互依賴的定量關(guān)系的一種統(tǒng)計分析方法, 運用十分廣泛.

優(yōu)點: 結(jié)果易于理解, 計算不復雜
缺點: 對非線性的數(shù)據(jù)擬合不好

例子

數(shù)據(jù): 工資和年齡 (2 個特征)
目標: 預測銀行會貸款給我多少錢 (標簽)

工資 年齡 額度
4000 25 20000
8000 30 70000
5000 28 35000
7500 33 50000
12000 40 85000

工資和年齡都會影響最終銀行貸款的結(jié)果. 那么它們各自有多大的影響呢?

通俗解釋

X1, X2 代表我們的兩個特征: 年齡和工資. Y 代表銀行最終會借給我們多少錢.

找到最合適的一條線 (想象一個高維 ) 來最好的擬合我們的數(shù)據(jù)點. 如下圖所示:

數(shù)學推導

假設(shè) θ1 代表年齡的參數(shù), θ2 代表工資的參數(shù), 那么:

注: θ0 為偏置頂, 相當于 C

線性模型, 中的向量 θ 值. 客觀的表達了各屬性在預測中的重要性, 因此線性模型有很好的解釋性. 對于這種 “多特征預測” 也就是 (多元線性回歸), 那么線性回歸就是在這個基礎(chǔ)上得到這些 θ 的值. 然后以這些值來建立模型, 預測試數(shù)據(jù). 簡單的來說就是學得一個線性模型以盡可能準確的預測實際輸出標記.

那么如果對于多變量線性回歸來說我們可以通過向量的方式來表示 θ 值與特征 X 值之間的關(guān)系:

兩向量相乘, 結(jié)果為一個整數(shù)是估計值. 其中所有特征集合的第一個特征值 x0=1, 那么我們可以通過通用的向量公式來表示性模型:

誤差

真實值和預測值之間肯定是要存在差異的. 對于每個樣本:

注: ε 代表誤差

誤差ε^(i)是獨立并且具有相同的分布, 并且服從均值為 0 方差為θ^2的正態(tài)分布 (normal distribution).

獨立: 凹凸曼和馬保國一起來貸款, 不可能因為馬保國貸款了 30 個億, 就少給凹凸曼錢.

預測值與誤差:

誤差服從高斯分布:

將 1 式帶入 2 式:

似然函數(shù):

對數(shù)似然函數(shù):

簡化:

讓似然函數(shù)越大越好 (最小二乘法):

目標函數(shù):

求偏導:

偏導等于 0:

評估方法

最常用的評估項 R^2:

R^2 的取值越接近于 1 我們認為模型擬合的越好.

梯度下降

上面誤差公式是一個通式, 我們?nèi)蓚€單個變量來求最小值. 目標函數(shù):

尋找山谷的最低點, 也就是我們的目標函數(shù)終點 (什么樣的參數(shù)能使得目標函數(shù)達到極值點)

下山分幾步走呢?

找到當前最合適的方向走一小步按照方向與步伐去更新我們的參數(shù)

目標函數(shù):

學習率 (learning_rate): 對結(jié)果影響較大, 越小越好.

數(shù)據(jù)批次 (batch_size): 優(yōu)先考慮內(nèi)存和效率, 批次大小是次要的.

批量梯度下降

目標

容易得到最優(yōu)解, 但是由于每次考慮所有樣本, 速度很慢.

隨機梯度下降

每次找一個樣本, 迭代速度快, 但不一定每次都朝著收斂的反向.

小批量梯度下降法

案例一

波士頓房價預測

from sklearn.datasets import load_boston
from sklearn.linear_model import LinearRegression, SGDRegressor
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler


def mylinear():
    """
    線性回歸直接預測房子價格
    :return: None
    """

    # 獲取數(shù)據(jù)
    lb = load_boston()

    # 分割數(shù)據(jù)記到訓練集和測試集
    x_train, x_test, y_train, y_test = train_test_split(lb.data, lb.target, test_size=0.25)

    # 進行標準化處理, 目標值處理
    # 特征值和目標是都必須進行標準化處理, 實例化兩個標準化API
    std_x = StandardScaler()

    x_train = std_x.fit_transform(x_train)
    x_test = std_x.fit_transform(x_test)

    # 目標值
    std_y = StandardScaler()

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

    # estimator預測
    # 正規(guī)方程求解方式預測結(jié)果
    lr = LinearRegression()

    lr.fit(x_train, y_train)
    print(lr.coef_)

    # 預測測試集房子價格
    y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
    print("正規(guī)方程式測試集里面每個房子的預測價格: ", y_lr_predict)
    print("正規(guī)方程的均方誤差: ", mean_squared_error(std_y.inverse_transform(y_test), y_lr_predict))

    # 梯度下降去進行房價預測
    sgd = SGDRegressor()

    sgd.fit(x_train, y_train)
    print(sgd.coef_)

    # 預測測試集的房子價格
    y_sgd_predict = std_y.inverse_transform(sgd.predict(x_test))
    print("梯度下降式測試集里面每個房子的預測價格: ", y_sgd_predict)
    print("梯度下降的均方誤差: ", mean_squared_error(std_y.inverse_transform(y_test), y_sgd_predict))

    return None


if __name__ == "__main__":
    mylinear()

輸出結(jié)果:
[[-0.12225698 0.12791281 -0.00206122 0.05700013 -0.2608399 0.28139416
0.01481249 -0.33807474 0.3299154 -0.23182836 -0.21123181 0.09206512
-0.39973041]]
正規(guī)方程式測試集里面每個房子的預測價格: [[28.95666718]
[25.61614205]
[24.20558764]
[19.30978406]
[35.89982059]
[29.03187299]
[26.34111014]
[19.46710495]
[20.6689787 ]
[29.93653292]
[25.11165216]
[32.91673513]
[19.84546548]
[23.5563843 ]
[21.79474763]
[15.75074992]
[19.80615694]
[12.98286759]
[27.59995691]
[19.00192788]
[36.16248095]
[19.2767701 ]
[16.52561836]
[23.05284655]
[16.59241324]
[25.66405442]
[30.7677223 ]
[19.86797053]
[ 9.39422797]
[27.10530759]
[27.17712717]
[39.44877655]
[10.03000383]
[15.42825832]
[23.13702928]
[14.52254261]
[19.38595173]
[29.06816506]
[36.30187936]
[22.5685246 ]
[ 9.88826283]
[21.33573342]
[31.3551175 ]
[16.18170604]
[27.59483437]
[31.66145736]
[14.31706514]
[24.46295319]
[17.51893204]
[19.35269608]
[24.26523283]
[24.86190305]
[25.11947262]
[28.93202524]
[15.75107827]
[13.3417495 ]
[22.59649735]
[29.00114487]
[12.20666867]
[30.63609004]
[21.96199386]
[27.06032461]
[25.1791211 ]
[17.97595194]
[41.57497749]
[21.43625394]
[24.28803424]
[16.5167138 ]
[19.38589021]
[ 8.06164985]
[23.7550887 ]
[12.10636177]
[23.67230518]
[31.52266655]
[19.30684626]
[20.31342004]
[25.13624205]
[18.6725454 ]
[34.44267213]
[19.76331507]
[33.68001958]
[17.21843608]
[11.93697393]
[20.10130687]
[20.60069168]
[33.02551169]
[12.20848437]
[11.34921413]
[36.81923651]
[43.09091788]
[24.5904135 ]
[27.19519096]
[13.42695648]
[21.31070858]
[18.78980458]
[26.7739455 ]
[21.04064808]
[19.37399749]
[20.61932093]
[12.70789542]
[27.30728839]
[29.19812469]
[18.2215341 ]
[14.88442393]
[13.08985585]
[37.26784993]
[23.0054703 ]
[45.03638993]
[24.43103986]
[ 9.70593527]
[ 7.20755399]
[24.11659246]
[16.87989582]
[23.8839 ]
[36.74286927]
[17.52801739]
[21.14217981]
[ 8.33442145]
[20.77366903]
[25.11687425]
[34.79817667]
[17.48069049]
[ 7.79217297]
[21.46168783]
[12.12750804]
[23.37886385]
[13.03642996]]
正規(guī)方程的均方誤差: 19.228239448103142
[-0.10382102 0.09549223 -0.0575206 0.06192685 -0.17919477 0.31416038
-0.0060828 -0.2718829 0.16557575 -0.09171927 -0.19702721 0.09358103
-0.38969764]
梯度下降式測試集里面每個房子的預測價格: [28.32281003 25.30899723 24.37354695 19.81132568 35.86134383 29.54339861
26.40901657 19.91790232 21.08280077 30.8745518 25.04025974 32.61880171
20.06776623 23.27211209 21.49391276 15.07364423 19.3604463 13.24307268
27.91816594 18.46564888 36.5121198 18.60090036 17.07584378 23.61453885
15.44119731 26.55848283 30.95932966 20.48910926 8.92774087 25.64122283
26.5405097 39.56312391 9.60876044 16.194631 21.86126606 14.3384503
19.6672515 28.37094255 37.13748452 22.56961348 10.95474568 21.31897902
31.99623025 16.32155785 27.56422641 31.91738771 16.07941322 25.21406318
17.07667764 18.61941274 23.61541029 25.09956295 24.16633871 29.24889477
16.17014144 13.52204965 21.76470038 28.75088192 11.39083277 29.94854783
21.97184713 26.76638021 25.37366415 17.75713168 42.17712979 21.44617697
24.65166416 15.74898705 19.28498974 7.18254411 23.64316345 12.17079475
23.22062874 30.81709679 19.39958374 20.53408606 25.34565728 18.55272456
33.84685681 19.4801645 33.86657711 17.02691146 11.07262797 20.44699002
20.83170047 32.66795247 11.2561216 11.94847677 35.85096014 42.30377951
24.56324407 27.96815655 13.30901928 22.23063794 19.1259557 27.02051826
21.39186325 20.33181273 21.29435341 11.25823767 27.67529642 30.095733
18.76124598 13.85728059 14.68490838 37.53663617 22.46940546 45.09885288
24.49884024 10.51414764 7.91453997 23.66015594 17.30342205 24.23971059
36.76137912 16.98059079 21.46394599 7.28066947 20.76359414 24.55927982
35.63307238 16.9695351 7.33008978 21.71197098 12.31280728 22.41710171
13.31011409]
梯度下降的均方誤差: 19.28139772207173

到此這篇關(guān)于python深度總結(jié)線性回歸的文章就介紹到這了,更多相關(guān)python線性回歸內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:
  • tensorflow基本操作小白快速構(gòu)建線性回歸和分類模型
  • 回歸預測分析python數(shù)據(jù)化運營線性回歸總結(jié)
  • python實現(xiàn)線性回歸算法
  • python機器學習之線性回歸詳解
  • 使用pytorch實現(xiàn)線性回歸
  • pytorch實現(xiàn)線性回歸
  • 詳解TensorFlow2實現(xiàn)前向傳播

標簽:上海 新疆 紅河 河南 沈陽 滄州 樂山 長治

巨人網(wǎng)絡(luò)通訊聲明:本文標題《python深度總結(jié)線性回歸》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266