scikit-learn 学习笔记(一)

这篇博客详细介绍了scikit-learn库中的线性模型,包括普通最小二乘法、岭回归、lasso、弹性网络、多任务lasso、最小角回归、贝叶斯岭回归、逻辑回归、随机梯度下降、感知器、被动攻击算法和鲁棒回归。特别是,逻辑回归被讨论用于寻找危险因素、预测和判别问题,而随机梯度下降和感知器在在线学习场景中发挥作用。
摘要由CSDN通过智能技术生成

其实前一阵一直在看《机器学习系统设计》,但是发现书上代码不全,不好复现,而且书针对的主要是文字的处理,正好是我最不关心的方向,所以看到一半忍痛弃坑。那么我们开始scikit-learn文档学习的旅程吧。

1. 线性模型

我对于线性模型的理解就是,将一系列的已知点回归到一个线性方程上去,类似于:\hat{y}(w, x) = w_0 + w_1 x_1 + ... + w_p x_p之后就可以用这个方程来预测未知点的解了。
sklearn 规定 w0是 intercept_. w1--wp是coef_.

1.1普通最小二乘法

那么如何将已知的点拟合到一个线性方程上去呢?sklearn提供的LinearRegression的思路就是让 点的已知值和预测值的平方和最小,即 \underset{w}{min\,} {|| X w - y||_2}^2.
下面我们直接上例子:
import matplotlib.pyplot as plt
import numpy as np
from sklearn import datasets, linear_model

diabetes = datasets.load_diabetes()
diabetes_X = diabetes.data[:,np.newaxis,2]
diabetes_X_train = diabetes_X[:-20]
diabetes_X_test = diabetes_X[-20:]
diabetes_y_train = diabetes.target[:-20]
diabetes_y_test = diabetes.target[-20:]

regr = linear_model.LinearRegression()
regr.fit(diabetes_X_train, diabetes_y_train) #这里就是在训练模型了

print('Coefficients: \n', regr.coef_) #这就是w0,常数项
print("Residual sum of squares: %.2f" % np.mean((regr.predict(diabetes_X_test) - diabetes_y_test) ** 2)) #这个是预测与真实的差
print('Variance score: %.2f' % regr.score(diabetes_X_test, diabetes_y_test)) #这里就是得分,1为拟合最好,0最差

plt.scatter(diabetes_X_test, diabetes_y_test, color = 'black')
plt.plot(diabetes_X_test,regr.predict(diabetes_X_test), color='blue',linewidth=3)
plt.xticks(())
plt.yticks(())

plt.show()
上图:


这个得分是0.47,果然拟合的不太好呢。

1.2 Ridge regression 岭回归

作为最小二乘法的一个改进,岭回归使用:

其中a>=0,w是一个动态调整的惩罚参数。
我们先上例子:
print(__doc__)

import numpy as np
import matplotlib.pyplot as plt
from sklearn import linear_model
#构造一个hilbert矩阵10*10
X = 1. / (np.arange(1,11) + np.arange(0,10)[:,np.newaxis])
y = np.ones(10) #10个1

n_alphas = 200
alphas = np.logspace(-10,-2,n_alphas) #等比数列,200个,作为岭回归的系数
clf = linear_model.Ridge(fit_intercept=False)
coefs = []
for a in alphas:
	clf.set_params(alpha=a)
	clf.fit(X,y)
	coefs.append(clf.coef_) #得到200个不同系数所训练出常数参数值

ax = plt.gca() 
ax.set_color_cycle(['b', 'r', 'g', 'c', 'k', 'y', 'm'])
ax.plot(alphas,coefs)
ax.set_xscale('log') #转为极坐标系
ax.set_xlim(ax.get_xlim()[::-1]) #反转x轴
plt.xlabel('alpha')
plt.ylabel('weight')
plt.title('Ridge coefficients as a function of the regularization')
plt.axis('tight')
plt.show()
上图片:


发现了什么?没错,传入岭回归的系数越小,常数项参数的值就越大,惩罚越重。
而且我们发现,在alpha小于10-5时,系数的变化明显变大,所以我们应该选取的值就在10-5附近。
那么这个值怎么自动计算出来呢?
上代码:
clf = linear_model.RidgeCV(alphas = alphas)
clf.fit(X,y)
clf.alpha_
这些代码的作用是输入一系列的alphas,然后sklearn会自动的内部cross验证最终得到最适合的alpha。

1.3 lasso(套索)

她的应用是基于稀疏模型的情况,进行线性拟合,这时的效果较好。那么什么是稀疏模型呢?比如我们采集许多的温度数据,肯定会存在大量的冗余数据,因为温度的变化是缓慢的,稀疏模型就会关注变化的点,而去除同质化的点,从而减少运算量。这个方法其实是压缩感知的基础。不知道压缩感知, 这里有一个好的普及贴。
她要最小化的是:

\underset{w}{min\,} { \frac{1}{2n_{samples}} ||X w - y||_2 ^ 2 + \alpha ||w||_1}



为了便于理解,我们直接上例子:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.metrics import r2_score
#我们先手动生成一些稀疏数据
print np.random.seed(42)
n_samples, n_features = 50, 200 
X = np.random.randn(n_
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值