一個完整的機器學(xué)習(xí)流程:
- 明確項目任務(wù):回歸/分類
- 收集數(shù)據(jù)集并選擇合適的特征。
- 選擇度量模型性能的指標(biāo)。
- 選擇具體的模型并進行訓(xùn)練以優(yōu)化模型。
- 評估模型的性能并調(diào)參。
1. 準(zhǔn)備數(shù)據(jù)
# 使用Boston房價來做本項目
from sklearn import datasets
boston=datasets.load_boston()
X=boston.data
y=boston.target
features=boston.feature_names
boston_data=pd.DataFrame(X,columns=features)
boston_data['Price']=y
boston_data.head()
2. 選擇衡量標(biāo)準(zhǔn)
- MSE均方誤差:這就是線性回歸中最常用的損失函數(shù),線性回歸過程中盡量讓該損失函數(shù)最小。
- MAE平均絕對誤差:平均絕對誤差能更好地反映預(yù)測值誤差的實際情況.
-
決定系數(shù):
介于0~1之間,越接近1,回歸擬合效果越好,一般認(rèn)為超過0.8的模型擬合優(yōu)度比較高。
- 解釋方差得分:
sklearn.metrics提供了一系列的評估指標(biāo)函數(shù)?;旧现苯诱{(diào)用就能很方便的計算指標(biāo)了。
https://scikit-learn.org/stable/modules/model_evaluation.html#regression-metrics
選擇模型- 線性回歸
線性回歸的推廣
如果數(shù)據(jù)關(guān)系是非線性時,效果會比較差。需要推廣后的模型來表達(dá)非線性的關(guān)系
- 從標(biāo)準(zhǔn)線性表達(dá)式 換成多項式
對于多項式的階數(shù)d不能取過大,一般不大于3或者4,因為d越大,多項式曲線就會越光滑,在X的邊界處有異常的波動。
使用sklearn.preprocessing.PolynomialFeatures來進行特征的構(gòu)造。它是使用多項式的方法來進行的,如果有a,b兩個特征,那么它的2次多項式為(1,a,b,a^2,ab, b^2)。
PolynomialFeatures有三個參數(shù)
degree:控制多項式的度
interaction_only: 默認(rèn)為False,如果指定為True,那么就不會有特征自己和自己結(jié)合的項,上面的二次項中沒有a2和b2。
include_bias:默認(rèn)為True。如果為True的話,那么就會有上面的 1那一項。
from sklearn.preprocessing import PolynomialFeatures
X_arr = np.arange(6).reshape(3, 2)
print("原始X為:\n",X_arr)
poly = PolynomialFeatures(2)
print("2次轉(zhuǎn)化X:\n",poly.fit_transform(X_arr))
poly = PolynomialFeatures(interaction_only=True)
print("2次轉(zhuǎn)化X:\n",poly.fit_transform(X_arr))
-
廣義可加模型(GAM):
廣義可加模型GAM實際上是線性模型推廣至非線性模型的一個框架,在這個框架中,每一個變量都用一個非線性函數(shù)來代替,但是模型本身保持整體可加性。GAM模型不僅僅可以用在線性回歸的推廣,還可以將線性分類模型進行推廣。具體的推廣形式是:
標(biāo)準(zhǔn)的線性回歸模型:
GAM模型框架:
GAM模型的優(yōu)點與不足:- 優(yōu)點:簡單容易操作,能夠很自然地推廣線性回歸模型至非線性模型,使得模型的預(yù)測精度有所上升;由于模型本身是可加的,因此GAM還是能像線性回歸模型一樣把其他因素控制不變的情況下單獨對某個變量進行推斷,極大地保留了線性回歸的易于推斷的性質(zhì)。
- 缺點:GAM模型會經(jīng)常忽略一些有意義的交互作用,比如某兩個特征共同影響因變量,不過GAM還是能像線性回歸一樣加入交互項
的形式進行建模;但是GAM模型本質(zhì)上還是一個可加模型,如果我們能擺脫可加性模型形式,可能還會提升模型預(yù)測精度
回歸樹
建立回歸樹的過程可以分為:
- 將自變量的特征空間的可能取值分割成J個不重疊的區(qū)域
- 對落入同一區(qū)域的每個觀察值做相同的預(yù)測。
如果特征變量與因變量的關(guān)系能很好的用線性關(guān)系來表達(dá),那么線性回歸通常有著不錯的預(yù)測效果,擬合效果則優(yōu)于不能揭示線性結(jié)構(gòu)的回歸樹。反之,如果特征變量與因變量的關(guān)系呈現(xiàn)高度復(fù)雜的非線性,那么樹方法比傳統(tǒng)方法更優(yōu)。
參數(shù):
criterion:{“ mse”,“ friedman_mse”,“ mae”},默認(rèn)=“ mse”。衡量分割標(biāo)準(zhǔn)的函數(shù) 。
splitter:{“best”, “random”}, default=”best”。分割方式。
max_depth:樹的最大深度。
min_samples_split:拆分內(nèi)部節(jié)點所需的最少樣本數(shù),默認(rèn)是2。
min_samples_leaf:在葉節(jié)點處需要的最小樣本數(shù)。默認(rèn)是1。
min_weight_fraction_leaf:在所有葉節(jié)點處(所有輸入樣本)的權(quán)重總和中的最小加權(quán)分?jǐn)?shù)。如果未提供sample_weight,則樣本的權(quán)重相等。默認(rèn)是0。
- 支持向量機回歸(SVR)
約束優(yōu)化問題。(明天再仔細(xì)推一下。=。=)
參數(shù):
kernel:核函數(shù),{‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’}, 默認(rèn)=’rbf’。(后面會詳細(xì)介紹)
degree:多項式核函數(shù)的階數(shù)。默認(rèn) = 3。
C:正則化參數(shù),默認(rèn)=1.0。(后面會詳細(xì)介紹)
epsilon:SVR模型允許的不計算誤差的鄰域大小。默認(rèn)0.1。
模型的方差與偏差。
Bias和Variance分別從兩個方面來描述我們學(xué)習(xí)到的模型與真實模型之間的差距。
Bias是用所有可能的訓(xùn)練數(shù)據(jù)集訓(xùn)練出的所有模型的輸出的平均值與真實模型的輸出值之間的差異。
Variance是不同的訓(xùn)練數(shù)據(jù)集訓(xùn)練出的模型輸出值之間的差異。
方差的數(shù)學(xué)定義:

方差的含義:方差度量了同樣大小的訓(xùn)練集的變動所導(dǎo)致的學(xué)習(xí)性能的變化,即刻畫了數(shù)據(jù)擾動所造成的影響。
偏差的數(shù)學(xué)定義:

偏差的含義:偏差度量了學(xué)習(xí)算法的期望預(yù)測與真實結(jié)果的偏離程度,即刻畫了學(xué)習(xí)算法本身的擬合能力。

特征的構(gòu)建
訓(xùn)練誤差修正
交叉驗證
K折交叉驗證:我們把訓(xùn)練樣本分成K等分,然后用K-1個樣本集當(dāng)做訓(xùn)練集,剩下的一份樣本集為驗證集去估計由K-1個樣本集得到的模型的精度,這個過程重復(fù)K次取平均值得到測試誤差的一個估計
從p個特征中選擇m個特征,使得對應(yīng)的模型的測試誤差的估計最小。
- 最優(yōu)子集選擇。 但計算量太大
- 向前逐步選擇
正則化:
- 嶺回歸
- lasso
降維:
調(diào)參:
- 網(wǎng)格搜索
2.隨即搜索