Scikit-learn笔记
最近在学Michigan大学Data science课程的第三门Applied Machine Learning in Python.
唉, 老师讲课好差劲. 听一遍一点印象都没有, 很快就忘了. 如果一个老师如果上课的时候不写板书, 只用PPT, 高概率不是个好老师. 连作业里的代码风格都很差劲, 哪有在函数内部import的, 交作业的时候还得自己把matplotlib给注释掉.
就是这个老师啦:
Kevyn Collins-Thompson
所以, 得趁着刚写完作业, 还有些印象, 赶紧记录下来.
这门课讲的也是机器学习, 但不是深度学习, 而是更为"传统"一些的. 用到的主要是Scikit-Learn.
关于Scikit-learn, datacamp上有个cheat sheet看起来不错, 而且SciKit-Learn自己的说明文档也很不错. 以后还是看这些文档参考.
常用算法¶
这门课主要讲了SciKit-Learn里几个常用的算法:
- KNN
- 线性回归: 最小二乘拟合, Ridge, Lasso, Polynomial Regression
- Logistic Regression
- 支持向量机: 线性和Kernelized
- 多层分类
- Cross-Validation
- Decision Trees
通用步骤¶
In [15]:
# 随便给个数据集
import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline
X=np.linspace(0,10,30).reshape(-1,1)
y= X*2+1+1*np.random.random_sample(X.shape)
plt.figure()
plt.plot(X,y,'.')
Out[15]:
In [16]:
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test=train_test_split(X,y)
In [17]:
plt.figure()
plt.plot(X_train,y_train,'.',color="red")
plt.plot(X_test,y_test,'o',color="blue")
Out[17]:
设模型并训练¶
一般来说设定模型就是模型().fit(X_train,y_train),
要应用训练好的模型就用模型.predict(X),
评估的话, 就是模型.score(X_train, y_train) 和模型.score(X_test, y_test)
In [24]:
from sklearn.linear_model import LinearRegression
linreg=LinearRegression().fit(X_train,y_train)
plt.figure()
plt.plot(X,y,'.')
plt.plot(X,linreg.predict(X))
print('R-squared score (training): {:.3f}'
.format(linreg.score(X_train, y_train)))
print('R-squared score (test): {:.3f}'
.format(linreg.score(X_test, y_test)))
各模型总结¶
含义 | 函数 | cost function | 参数 | 过拟合时调参 |
---|---|---|---|---|
常规线性拟合 | LinearRegression | MSE | 无 | 无 |
参数L2约束(平方和)的线性拟合 | Ridge | MSE+alpha* Sum(w^2) | alpha | 增大alpha |
参数L1约束(稀疏)的线性拟合 | Lasso | MSE+ alpha* Sum(abs(w)) | alpha=2.0, max_iter = 10000 | 增大alpha |
多项式拟合 | PolynomialFeatures | 先poly = PolynomialFeatures(degree=2), 然后X_poly = poly.fit_transform(X), 再送入各种线性拟合 | 同Ridge或Lasso | 同Ridge或Lasso |
其实就是Sigmoid | LogisticRegression | C, 负责L2约束 | 减小C | |
线性SVM | LinearSVC | C | 减小C | |
Kernelized SVM | SVC(kernel = "rbf") | C, 负责曲面的平滑, gamma, 负责局部点的重要性 | 减小C, 减小gamma | |
决策树 | DecisionTreeClassifier | max_depth, min_samples_leaf | 减小max_depth, 增大min_samples_leaf |