09 線性迴歸及矩陣運算

09 線性迴歸及矩陣運算

線性迴歸

  1. 定義:經過一個或者多個自變量與因變量之間進行建模的迴歸分析。其中能夠爲一個或者多個自變量之間的線性組合。python

  2. 一元線性迴歸:涉及到的變量只有一個
    多元線性迴歸:變量兩個或以上算法

  3. 通用公式:h(w) = w0 + w1x1 + w2x2 + ....= wTx
    其中w,x 爲矩陣:wT=(w0, w1, w2) x=(1,x1, x2)Tapi

迴歸的應用場景 (連續型數據)

  1. 房價預測
  2. 銷售額預測 (廣告,研發成本,規模等因素)
  3. 貸款額度

線性關係模型

  1. 定義: 經過屬性 (特徵) 的線性組合來進行預測的函數:
    • f(x) = w1x1 + w2x2 + w3x3 + ...... + wdxd + b
    • w : weight (權重) b: bias (偏置項)
    • 多個特徵: (w1:房子的面積, w2:房子的位置 ..)

損失函數(偏差)

  1. 《統計學習方法》 - 算法 ,策略, 優化
  • 線性迴歸, 最小二乘法,正規方程 & 梯度降低
  1. 損失函數(偏差大小)
  • yi 爲第i個訓練樣本的真實值
  • hw(xi)爲第i個訓練樣本特徵值組合預測函數 (預測值)
  1. 尋找最優化的w
    1. 最小二乘法之正規方程 (直接求解到最小值,特徵複雜時可能沒辦法求解)
      • 求解:w= (xTx)-1 xTy
      • X 爲特徵值矩陣,y爲目標值矩陣
      • 缺點: 特徵過於複雜時,求解速度慢
    2. 最小二乘法之梯度降低
      函數

      • 使用場景:面對訓練數據規模龐大的任務
      • 超參數:a

線性迴歸算法案例

API

  1. sklearn.linear_model.LinealRegression()
  • 普通最小二乘法線性迴歸
  • coef_: 迴歸係數 (w值)
  1. sklearn.linear_model.SGDRegressir()
  • 經過使用SGD最小化線性模型
  • coef_: 迴歸係數
  • 不能手動指定學習率

波士頓房價預測

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

def mylinear():
    """
    線性迴歸預測房價
    :return: None
    """
    # 1. 獲取數據
    lb = load_boston()

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

    # 3. 進行標準化處理(特徵值和目標值都必須標準化處理)
    # 實例化兩個標準化API,特徵值和目標值要用各自fit
    # 特徵值
    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)
    y_test = std_y.transform(y_test)

    # 4. estimator預測
    # 4.1 正規方程求解預測結果
    lr = LinearRegression()
    lr.fit(x_train, y_train)
    print(lr.coef_)
    y_lr_predict = std_y.inverse_transform(lr.predict(x_test))
    print('正規方程測試集裏面每一個房子的預測價格:', y_lr_predict)
    print('正規方程的均方偏差:',mean_squared_error(std_y.inverse_transform(y_test),y_lr_predict))

    # 4.1 梯度降低進行梯度預測
    sgd = SGDRegressor()
    lr.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()

迴歸性能評估

均方偏差 (Mean Squared Error MSE) 評價機制性能

  • mean_squared_error(y_true, y_pred)
  • 真實值和預測值爲標準化話以前的值

兩種預測方式的選擇

  1. 樣本量選擇
    樣本量大於100K --> SGD 梯度降低
    樣本量小於100K --> 其餘
梯度降低 正規方程
須要選擇學習率 不須要
須要屢次迭代 一次運算得出
當特徵數量大時也能較好使用 須要計算(xTx)-1,運算量大
適用於各類類型的模型 只適用於線性模型
  1. 特色:線性迴歸器是最爲簡單、易用的迴歸模型,在不知道特徵之間關係的狀況下,
    能夠使用線性迴歸器做爲大多數系統的首要選擇。LinearRegression 不能解決擬合問題。
相關文章
相關標籤/搜索