嶺回歸的基本用法
Ridge
回歸通過對系數的大小施加懲罰來解決普通最小二乘法的一些問題。嶺系數最小化的是帶懲罰項的誤差平方和:
其中,是控制系數收縮量的複雜性參數,越大,收縮量越大,模型對共線性的魯棒性越強。
與其他線性模型一樣,
Ridge
使用
fit
方法完成拟合,并将模型系數存儲在其
coef_
成員中:
>>> from sklearn import linear_model
>>> reg = linear_model.Ridge(alpha=0.5)
>>> reg.fit([[0, 0], [0, 0], [1, 1]], [0, 0.1, 1])
Ridge(alpha=0.5)
>>> reg.coef_
array([0.34545455, 0.34545455])
>>> reg.intercept_
0.1363636363636364
嶺回歸示例1:嶺回歸對回歸系數的影響
說明共線性對拟合的模型的系數(
coef_
)的影響。
嶺回歸是本例中使用的估計量。每種顔色代表系數向量的不同特征,這是正則化參數的函數。
這個例子也說明了将嶺回歸應用于高度病态的矩陣的用處。對于這樣的矩陣,目标變量的微小變化會導緻計算的權重出現巨大的差異。在這種情況下,設定一定的正則化(alpha)來減少這種變化(噪聲)是很有用的。
當很大時,正則化效應在損失平方函數中占主導地位,系數趨于零。在路徑的盡頭,當趨向于零,解趨向于普通的最小二乘時,系數表現出很大的振蕩。在實踐中,有必要對alpha進行調優,以保持兩者之間的平衡。
import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
# x是希爾伯特矩陣(希爾伯特矩陣是一種數學變換矩陣,正定,且高度病态(即,任何一個元素發生一點變動,整個矩陣的行列式的值和逆矩陣都會發生巨大變化),病态程度和階數相關。)
x = 1.0 / (np.arange(1, 11) + np.arange(0, 10)[:, np.newaxis])
y = np.ones(10)
n_alphas = 200
alphas = np.logspace(-10, -2, n_alphas)
# 對每個alpha計算嶺回歸模型的coef_
coefs = []
for alpha in alphas:
ridge = linear_model.Ridge(alpha=alpha, fit_intercept=False)
ridge.fit(x, y)
coefs.append(ridge.coef_)
# 繪制結果(alpha為x軸,coef_為y軸的變化)
ax = plt.gca()
ax.plot(alphas, coefs)
ax.set_xscale('log')
ax.set_xlim(ax.get_xlim())[::-1]
plt.xlabel('alpha')
plt.ylabel('weights')
plt.title('Ridge coefficients as a function of the regularization')
plt.show()
嶺回歸示例2:使用稀疏特征對文本文檔進行分類
import logging
import numpy as np
from optparse import OptionParser
import sys
from time import time
import matplotlib.pyplot as plt
from sklearn.datasets import fetch_20newsgroups
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.feature_extraction.text import HashingVectorizer
from sklearn.feature_selection import SelectFromModel
from sklearn.feature_selection import SelectKBest, chi2
from sklearn.linear_model import RidgeClassifier
from sklearn.pipeline import Pipeline
from sklearn.svm import LinearSVC
from sklearn.linear_model import Perceptron
from sklearn.linear_model import SGDClassifier
from sklearn.linear_model import PassiveAggressiveClassifier
from sklearn.naive_bayes import BernoulliNB, ComplementNB, MultinomialNB
from sklearn.neighbors import KNeighborsClassifier
from sklearn.neighbors import NearestCentroid
from sklearn.ensemble import RandomForestClassifier
from sklearn.utils.extmath import density
from sklearn import metrics