天天看點

Sklearn實作嶺回歸

嶺回歸的基本用法

​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      

繼續閱讀