01_07小结
总结
所用到的机器学习类的一些总结
机器学习(监督)分两大类:分类(Classifier)、回归(Regressor)
泛化:如果一个模型能够对没见过的数据做出准确预测,我们就说它能够从训练集泛化(generalize)到测试集。
过拟合:构建一个对现有信息量来说过于复杂的模型就会出现过拟合 (overfitting)。如果你在拟合模型时过分关注训练集的细节,得到了一个在训练集上表现很好、但不能泛化到新数据上的模型,那么就存在过拟合。(简单理解:训练得分很高,测试得分较低,很有可能是过拟合)
欠拟合:选择过于简单的模型被称为欠拟合(underfitting)(简单理解:训练得分和测试得分都很低)
sklearn中算法的使用步骤
- 数据分析,通过分析确定要用哪种算法
- 组织数据,将数据拆分为data、target、target_name
- 通过train_test_split将数据拆分为:训练集、测试集(默认0.75/0.25的比例,可以通过test_size修改),通过random_state设置随机种子,打乱数据
- 实例化算法类,通过算法类的 fit 函数训练数据
- 通过predict预测、回归
- score计算精度(得分)
from sklearn.model_selection import train_test_split
from sklearn.neighbors import KNeighborsClassifier
from sklearn.datasets import load_iris# 加载数据;可以使用pandas,加载分析后的数据(经过数据清洗)
iris = load_iris()# 通过train_test_split将数据拆分
X_train,X_test,Y_train,Y_test = train_test_split(iris.data,iris.target,random_state=42)#训练模型
knn = KNeighborsClassifier().fit(X_train,Y_train)# 模型评估 core计算精度
print("Test accuracy: {:.2f}".format(knn.score(X_test, Y_test)))
print("Train accuracy: {:.2f}".format(knn.score(X_train, Y_train))) # 预测数据(注意 x_new,是二维数组格式[n,n_feautre])
x_new= [[5,2.8,1,0.3]]
iris_class[int(knn.predict(x_new)[0])]
学习曲线
将模型性能(训练得分、测试得分)作为数据集大小的函数进行绘图,这样的图像叫作学习曲线。通过学习曲线可以直观的看到模型的大小对训练分数的影响。
是机器学习调参的有效手段。
学习算法
k近邻
适用于小型数据集,是很好的基准模型,很容易解释。
from sklearn.neighbors import KNeighborsClassifier # 分类
from sklearn.neighbors import KNeighborsRegressor # 回归
线性模型
常可靠的首选算法,适用于非常大的数据集,也适用于高维数据。
from sklearn.linear_model import LinearRegression # 线性回归
from sklearn.linear_model import Ridge # L2 正则化回归(岭回归)
from sklearn.linear_model import Lasso # L1 正则化回归from sklearn.linear_model import LogisticRegression # 线性分类(二分类)
from sklearn.svm import LinearSVC # 线性支持向量机,多分类
朴素贝叶斯
只适用于分类问题。比线性模型速度还快,适用于非常大的数据集和高维数据。精度通常要低于线性模型。
from sklearn.naive_bayes import GaussianNB # 高斯朴素贝叶斯分类器
from sklearn.naive_bayes import BernoulliNB # 伯努利朴素贝叶斯分类器
from sklearn.naive_bayes import MultinomialNB# 多项式朴素贝叶斯分类器
决策树
速度很快,不需要数据缩放,可以利用 tree 模块的 export_graphviz 函数来将树可视化,很容易解释。
from sklearn.tree import DecisionTreeClassifier # 分类决策树
from sklearn.tree import DecisionTreeRegressor # 回归决策树
DecisionTreeRegressor(回归决策树)不能外推,也不能在训练数据范围之外进行预测。
随机深林
几乎总是比单棵决策树的表现要好,鲁棒性很好,非常强大。不需要数据缩放。不适用于高维稀疏数据。
from sklearn.ensemble import RandomForestClassifier
梯度提升回归树
from sklearn.ensemble import GradientBoostingClassifier
支持向量机
对于特征含义相似的中等大小的数据集很强大。需要数据缩放,对参数敏感。
from sklearn.svm import LinearSVC # 线性支持向量机
from sklearn.svm import SVC # 支持向量机
神经网络
可以构建非常复杂的模型,特别是对于大型数据集而言。对数据缩放敏感,对参数选取敏感。大型网络需要很长的训练时间。
from sklearn.neural_network import MLPClassifier # 前馈分类神经网络
from sklearn.neural_network import MLPRegressor # 前馈回归神经网络
面对新数据集,通常最好先从简单模型开始,比如线性模型、朴素贝叶斯或最近邻分类器,看能得到什么样的结果。对数据有了进一步了解之后,你可以考虑用于构建更复杂模型的算法,比如随机森林、梯度提升决策树、SVM 或神经网络。