数学和算法

UD机器学习 - C2 机器学习基础

2019-09-30  本文已影响0人  左心Chris

训练和测试模型:sklearn基本语句,pandas和numpy,train_test_split
评估指标:混淆矩阵,准确率,精度,召回率,F1,Fbeta,ROC曲线
回归指标:绝对值,平方差,r2 score
模型选择:交叉验证,学习曲线,网格搜索

1 训练和测试模型

1.1 统计学知识

居中趋势测量:均值、中值、众数。
数据的离散性:四分位距法、异常值、标准偏差、贝塞尔修正(算样本方差和样本标准差时把n变为n-1)。

1.2 pandas 和 numpy

import pandas as pd
import numpy as np
df = pd.read_csv('.csv')
np.array(df[["x","y"]])

Data frame and numpy简介

https://juejin.im/post/5ad57db3f265da239c7bd9fb
https://zhuanlan.zhihu.com/p/27624814

1.3 sklearn 训练模型

from sklearn.linear_model import LogisticRegression
classifier = LogisticRegression()
from sklearn.neural_network import MLPClassifier
classifier = MLPClassifier()
from sklearn.tree import DecisionTreeClassifier
classifier = DecisionTreeClassifier()
from sklearn.svm import SVC
classifier = SVC()
from sklearn.linear_model import
classifier.fit(X,y)

调整参数

classifier = SVC()
classifier.fit(X,y)
classifier = SVC(kernel = 'poly', degree = 2)
后面的课程会介绍自动调整参数

1.4 测试模型

通过分割训练集和测试集,用测试集测试

Use

Shall never use your testing data for training

2 评估指标

混淆矩阵

True或False代表预测的对错,Postive或Negtive代表预测的方向

准确率 Accuracy

(TP + TN) / ALL
所有预测正确的/总数
from sklearn.metrics import accuracy_score
不适用于一些情况,比如预测信用卡欺诈,全部预测为没问题,虽然准确率高,但是有问题

假阴性和假阳性

不同的案例使用不同的指标



医疗检测是尽可能找到所有生病的人
垃圾邮件是找出的垃圾邮件,最好是垃圾邮件

精度 Precision

TP / (TP + FP)
所有预测为positive的点,有多少为真的positive,使用TP做分子
适用于垃圾邮件检测

召回率 Recall

所有真的positive的点,有多少被正确预测为positive
TP / (TP + TN)
适用于医疗模型

F1和F-beta

2/F1 = 1/Recall + 1/Precision
调和平均数总是小于算术平均数,调和平均数接近于更小的那个数
1/Fβ = N^2 / ((1+N^2) *recall) + 1 / ((1+N^2) *precision)
Fβ = (1+N^2) (precision * recall) / N^2 *precision + recall

如果 β=0, 则得出精度。
如果 β=∞, 则得出召回率。
对于 other values of β, 的其他值,如果接近 0,则得出接近精度的值,如果很大,则得出接近召回率的值,如果 β=1, 则得出精度和召回率的调和平均数

ROC曲线

两个召回率坐标,画图像,面积越接近1最好

ROC空间将伪阳性率(FPR)定义为 X 轴,真阳性率(TPR)定义为 Y 轴。

回归指标

Mean absolute error

from sklearn.metrics import mean_absolute_error
from sklearn.linear_model import LInearRegression
classifier = LinearRegression()
classifier.fit(X, y)
guesses = classifier.predict(X)
error = mean_absolute_error(y, guesses)
缺点不能求导,不好用梯度下降

Mean squared error

from sklearn.metrics import mean_squared_error

R2 score

Use R2 score = 1 - 实际的/过中心点的直线


from sklearn.metrics import r2_score
r2_score(y_true, y_pred)

R2接近1模型好,接近0模型差

3 模型选择

错误类型

Underfitfing and overfitting

交叉验证

Model complexity graph 交叉验证来遵守训练的时候不使用测试集的原则:
训练集用来训练模型,验证集来选择超参数以便减少像过拟合的问题
简单交叉验证把Training set 分为训练集和交叉验证集,test set不变

K折验证交叉

目的是不浪费验证集,把数据分为k份留一份为测试集,剩余为交叉验证集
训练k次,把结果的平均误差选为最后的结果来判断
from sklearn.model_selection import KFold
kf = KFold(12,3) #12 is size of data and 3 is the size of the testing set
kf = KFold(12,3,shuffle=True)


学习曲线

关于学习曲线的用法的介绍
https://deeplearning-ai.github.io/machine-learning-yearning-cn/docs/ch28/
https://zhuanlan.zhihu.com/p/33700459
https://www.jiqizhixin.com/articles/2018-01-23
检测是否过拟合, 传入一个数据集,然后cv分开成训练集和验证集,用训练集的一部分用来训练,误差为训练误差,验证集计算前面训练后的为验证误差。
这篇官方文档写的不错:
Validation curve和Learning curve
http://sklearn.lzjqsdd.com/modules/learning_curve.html
每个预测模型都有它的优缺点。大体上它的误差由偏差(bias)、方差(variance)和噪声(noise)组成。一个模型的 偏差 指其对于不同的训练样本集,预测结果的平均误差。方差 指模型对于不同训练样本集的敏感程度。噪声则是数据集本身的一项属性。

偏差和方差是预测模型固有的属性,我们通常必须选择合适的学习算法和超参数来尽可能同时降低它们(见 Bias-variance dilemma)。另一种降低方差的方式为使用更多的训练数据。但只有当使用更低方差的模型仍然无法拟合过于复杂的函数时,你才应该着手去收集更多的训练数据。

https://github.com/ZSMX/Udacity_Machine_Learning/tree/master/C2/LearningCurve

train_sizes, train_scores, test_scores = learning_curve(
    estimator, X, y, cv=None, n_jobs=1, train_sizes=np.linspace(.1, 1.0, num_trainings))

随着训练点数的增加,训练误差和交叉验证集误差 training error and CV error
好的模型两个误差相交与一点且比较低,可以查看是否过拟合




上面测量的是得分,翻转一下就是误差了,和上上面的图对应:


网格搜索

训练流程

用训练集训练parameters,然后用验证集计算指标(比如F1 score)选择超参数,最后用测试集判断这个模型好不好

sklearn使用网格搜索

比如训练SVM,有以下超参数:
kernel:poly或rbf。
C:0.1,1 或 10。
https://github.com/ZSMX/Udacity_Machine_Learning/tree/master/C2/GridSearch

4 项目

预测料理
https://github.com/ZSMX/Udacity_Machine_Learning/tree/master/C2/PredictYourCuisine
如何使用 scikit-learn 为机器学习准备文本数据
https://zhuanlan.zhihu.com/p/33779124

预测boston房价
https://github.com/ZSMX/Udacity_Machine_Learning/tree/master/C2/BostonHousingPrice

上一篇下一篇

猜你喜欢

热点阅读