- 簡介
- 用數據擬合直線
- 調整一直線
- 絕對值技巧
- 平方技巧
- 梯度下降
- 平均絕對值誤差
- 平均平方誤差
- 最小誤差化函數
- 均方誤差與總平方誤差
- 小批量梯度下降法
- 絕對值誤差 VS 平方誤差
- scikit-learn中的線性迴歸
- 高維度
- 多元線性回歸
- 解數學方程組
- 線性迴歸注意事項
- 多項式回歸
- 正則化
- 神經網路回歸
- 嘗試神經網路
- 分類: 預測一個狀態。
- 回歸: 預測一個值。
- 本章會先從線性回歸討論起,然後再學習如何處理非線性迴歸。
- 每一次,都慢慢地調整直線,讓直線可以儘可能地靠近所有的點。
- W1增大: 逆時針轉動。
- W1減小: 順時針轉動。
- W2增大: 平行上移。
- W2減小: 平行下移。
- 利用p值,來調整直線,讓直線來更靠近點。
- learning rate: 控制直線的移動步伐。
- 跟絕對值技巧不同的地方是,如果點離直線近,那就慢慢調整直線,如果點離直線遠,那調整直線的幅度就增大。
- 不只利用p值,還利用了(q-y)高度差。
- 紅色線:Weight所構成的error function。
- 綠色線:error function對於weight所偏微分,也就是梯度下降的方向。
- 利用偏微分的結果來更新weight,讓整體error值下降。
- 在梯度下降中,有提到所謂的error function,在Linear regression用到的error function有兩種。
- Mean absoulte error 平均絕對值誤差。
- Mean square error 平均平方誤差。
- 到目前為止,我們學到兩種方式來讓直線來擬合這些點。
- Trick: 絕對值技巧, 平方技巧
- Error functions: 平均絕對值誤差, 平均平方誤差
- 其實Trick跟Error functions是相對應的方式。
- 推導證明:
- 推導證明:
- Batch:同時依據所有點進行調整。
- Stochastic: 一次只依據一個點進行調整。
- Mini-batch: 一次只依據部分的點進行調整。
- 什麼時候該用絕對值誤差? 什麼時候該用平方誤差
- A,B,C三條線,斜率相同,只是上下平移。
- A,B,C具有相同絕對值誤差。
- B具有最小平方誤差。(因爲平方誤差是二次函數,會有最小值)
使用关于全球男性平均出生预期寿命和平均 BMI 的数据
# TODO: Add import statements
import pandas as pd
from sklearn.linear_model import LinearRegression
# Assign the dataframe to this variable.
# TODO: Load the data
bmi_life_data = pd.read_csv("bmi_and_life_expectancy.csv")
# Make and fit the linear regression model
#TODO: Fit the model and Assign it to bmi_life_model
bmi_life_model = LinearRegression()
bmi_life_model.fit(bmi_life_data[['BMI']], bmi_life_data[['Life expectancy']])
# Make a prediction using the model
# TODO: Predict life expectancy for a BMI value of 21.07931
laos_life_exp = bmi_life_model.predict(21.07931)
- 之前討論都是在一維空間,現在延伸到高維空間。
- 一樣可以用之前學到的技巧(絕對值技巧, 平方技巧),Error functions(平均絕對值誤差, 平均平方誤差),來找出最佳的擬合結果。
使用 波士顿房价数据集。该数据集包含 506 座房子的 13 个特征,均值为 $1000's。你将用一个模型拟合这 13 个特征,以预测房价
from sklearn.linear_model import LinearRegression
from sklearn.datasets import load_boston
# Load the data from the boston house-prices dataset
boston_data = load_boston()
x = boston_data['data']
y = boston_data['target']
# Make and fit the linear regression model
# TODO: Fit the model and assign it to the model variable
model = LinearRegression()
model.fit(x, y)
# Make a prediction using the model
sample_house = [[2.29690000e-01, 0.00000000e+00, 1.05900000e+01, 0.00000000e+00, 4.89000000e-01,
6.32600000e+00, 5.25000000e+01, 4.35490000e+00, 4.00000000e+00, 2.77000000e+02,
1.86000000e+01, 3.94870000e+02, 1.09700000e+01]]
# TODO: Predict housing price for the sample_house
prediction = model.predict(sample_house)
线性回归隐含一系列前提假设,并非适合所有情形,因此应当注意以下两个问题。
- 最适用于线性数据
- 线性回归会根据训练数据生成直线模型。如果训练数据包含非线性关系,你需要选择:调整数据(进行数据转换)、增加特征数量(参考下节内容)或改用其他模型。
- 容易受到异常值影响
- 线性回归的目标是求取对训练数据而言的 “最优拟合” 直线。如果数据集中存在不符合总体规律的异常值,最终结果将会存在不小偏差。
- 單純的直線無法很好擬合這些點,所以改用高次多項式。
- 例如,我們要解決這4個權重(找出最佳的權重值)
- 先求出平方誤差的平均值。
- 分別對4的變量進行偏微分。
- 利用梯度下降法,修改這4個權重,找出最小化的誤差。
正则化的目的是限制参数过多或者过大,避免模型更加复杂。
- 除了考慮模型的準確性外,也要考慮模型的複雜性,太複雜的模型有可能導致overfitting。
- L1 regularization
- L2 regularization
- large lamba: 模型會傾向簡化。
- small lamba: 模型會傾向複雜化。
- 這段沒有很懂,講得太不清楚了 ??
- 另外一種擬合的方式,拆成多個直線段來進行擬合(不一定要用高維多項式)。
- 神經網路回歸的重點,就是將最後一個sigmoid的單元刪除,如此就是得到前面各層的輸出加權總和(從分類就變成回歸)。
- 如何利用神經網路回歸來進行多個直線段的擬合。
- 每個單元都是單純的線性組合,並在透過relu進行輸出。
- 多層layer的疊加後,就會擬合成多個直線段。
- 神奇的神经网络 “游乐场”,在这里你可以看到很棒的可视化效果,并可以使用参数来解决线性回归问题,然后尝试一些神经网络回归