目录

  • 1 模块一  Python与机器学习概述
    • 1.1 Python与机器学习简介
    • 1.2 发展历程
    • 1.3 基本语法
    • 1.4 帮助
    • 1.5 应用
    • 1.6 示例源代码(食品识别小小专家系统)
    • 1.7 示例代码   蜡笔小新
    • 1.8 小结
    • 1.9 Python基础教程(教&学资料)
      • 1.9.1 安装Python
      • 1.9.2 第一个python程序
      • 1.9.3 Python基础
      • 1.9.4 函数
      • 1.9.5 高级特性
      • 1.9.6 函数式编程
      • 1.9.7 模块
      • 1.9.8 面向对象编程
      • 1.9.9 面向对象高级编程
      • 1.9.10 错误、调试和测试
      • 1.9.11 IO编程
      • 1.9.12 进程和线程
      • 1.9.13 正则表达式
      • 1.9.14 常用内建模块
      • 1.9.15 常用第三方模块
      • 1.9.16 图形界面
      • 1.9.17 网络编程
      • 1.9.18 电子邮件
      • 1.9.19 访问数据库
      • 1.9.20 Web开发
      • 1.9.21 异步IO
      • 1.9.22 使用MicroPython
      • 1.9.23 实战训练(day1~~day10)
        • 1.9.23.1 Day 1 - 搭建开发环境
        • 1.9.23.2 Day 2 - 编写Web App骨架
        • 1.9.23.3 Day 3 - 编写ORM
        • 1.9.23.4 Day 4 - 编写Model
        • 1.9.23.5 Day 5 - 编写Web框架
        • 1.9.23.6 Day 6 - 编写配置文件
        • 1.9.23.7 Day 7 - 编写MVC
        • 1.9.23.8 Day 8 - 构建前端
        • 1.9.23.9 Day 9 - 编写API
        • 1.9.23.10 Day 10 - 用户注册和登录
      • 1.9.24 Day 11 - 编写日志创建页
      • 1.9.25 Day 12 - 编写日志列表页
      • 1.9.26 Day 13 - 提升开发效率
      • 1.9.27 Day 14 - 完成Web App
      • 1.9.28 Day 15 - 部署Web App
      • 1.9.29 Day 16 - 编写移动App
    • 1.10 FAQ
    • 1.11 阶段总结
  • 2 PYthon程序示例
    • 2.1 程序示例(一)初识程序
    • 2.2 程序示例(二)查看今天是今年的第几天
    • 2.3 程序示例(三)if elif else语句
    • 2.4 程序示例(四)元组,列表, 堆栈,队列
    • 2.5 程序示例(五)学玩游戏《学色彩  神魔三龟玩变色》
    • 2.6 程序示例(六)函数
    • 2.7 程序示例(七)字符串
    • 2.8 程序示例(八)文件
    • 2.9 程序示例(九)排序
    • 2.10 程序示例-机器学习中英单词翻译小专家
    • 2.11 程序示例      画花朵  &  画佩奇
    • 2.12 程序示例   华夏时钟
    • 2.13 示例:  显示图片,响声
    • 2.14 播放声音视频文件mp3、wmv、wav、m4a等)
    • 2.15 Python WEB开发技术实战
  • 3 模块2 NumPy数值计算
    • 3.1 ndarray创建与索引
    • 3.2 ndarray的基础操作
    • 3.3 ufunc
    • 3.4 小结
    • 3.5 习题与实训
  • 4 模块3   pandas基础
    • 4.1 pandas常用类
    • 4.2 DataFrame基础操作
    • 4.3 其他数据类型操作
    • 4.4 小结
    • 4.5 习题与实训
    • 4.6 练习题
  • 5 模块4 pandas进阶
    • 5.1 数据读取与写出
    • 5.2 DataFrame进阶
    • 5.3 数据准备
    • 5.4 小结
    • 5.5 习题与实训
    • 5.6 练习习题及解答(参考)
  • 6 模块5 Matplotlib基础绘图
    • 6.1 Matplotlib绘图基础
    • 6.2 分析特征关系常用图形
    • 6.3 分析特征内部数据状态常用图形
    • 6.4 小结
    • 6.5 习题与实训
  • 7 模块6 机器学习库 scikit-learn
    • 7.1 数据准备
    • 7.2 降维
    • 7.3 分类
    • 7.4 回归
    • 7.5 聚类
    • 7.6 模型选择
    • 7.7 小结
    • 7.8 习题与实训
  • 8 模块7 餐饮企业综合分析
    • 8.1 (案例)餐饮企业分析需求
    • 8.2 数据准备
    • 8.3 使用K-means算法进行客户价值分析
    • 8.4 使用决策树算法实现餐饮客户流失预测
    • 8.5 小结
    • 8.6 习题与实训
  • 9 模块8  通信运营商客户流失分析与预测
    • 9.1 通信运营商客户流失分析需求
    • 9.2 数据准备
    • 9.3 特征工程
    • 9.4 使用多层感知器算法实现通信运营商 客户流失预测
    • 9.5 小结
    • 9.6 习题与实训
  • 10 学习参考资源
    • 10.1 机器学习的通俗讲解
    • 10.2 十大机器学习算法及其应用
    • 10.3 常用机器学习算法优缺点及其应用领域
    • 10.4 轻松学会 Python turtle 绘图
    • 10.5 Python 习题库
      • 10.5.1 习题1
    • 10.6 上机操作实训库
    • 10.7 面试准备题
    • 10.8 Python 程序扩展名 及发布程序时的选择
    • 10.9 计算机Python考试大纲
    • 10.10 Python  基础知识点梳理
    • 10.11 Python常用模块大全
    • 10.12 机器学习基本术语
    • 10.13 几个机器学习的成功案例
    • 10.14 60个机器学习算法应用场景实例
  • 11 章节测验(必测)
    • 11.1 测验一
    • 11.2 测验二
    • 11.3 测验三
    • 11.4 测验四
    • 11.5 测验五
    • 11.6 测验六
    • 11.7 测验七
    • 11.8 测验八
    • 11.9 测验九
    • 11.10 测验十
    • 11.11 编程专项测验
    • 11.12 填空题专项测验
    • 11.13 判断题专项测试
    • 11.14 简答题专项测试
    • 11.15 《机器学习技术》总复习
    • 11.16 书本--习题参考解答
  • 12 综合实训项目及展示
    • 12.1 项目(一)作品展示(1)
    • 12.2 项目(一)作品展示(2)
    • 12.3 团队项目实训(必作!)
模型选择

(六)模型选择      比较,验证和选择参数和模型。

目标:通过参数调整提高准确性 模块: 网格搜索,交叉验证,指标。

评估模型

不同的应用有着不同的目标,不同的评价指标


模型评价指标

准确率

准确率越高,模型不一定越好

准确率是常见的一种评估模型,但是准确率越高模型不一定越好。


举个例子

假设,在1000个样本中,有999个正样本,1个负样本(不均衡数据集) 如果全部预测正样本,就可以得到准确率99.9%!

这样的场景有:信用卡欺诈检测,离职员工检测等。

有些任务更关心的是某个类的准确率,而非整体的准确率。

比如预测病人是否患癌症,100个人只有1个人换癌症,模型的准确率为99%,但是此模型可能把本来患病的人预测成不患病,这样的情况是非常危险的。

既然准确率不足以进行模型评价,下面介绍几个模型评价的指标。


精确率,召回率

真正例(TP)

预测值是1,真实值是1。被正确分类的正例样本。

假正例(FP)

预测值是1,但真实值是0

真反例(TN)

预测值是0,真实值是0

假反例(FN)

预测值是0,但真实值是1。

正反例是相对于预测值来说的,预测值是1时即正例,预测值为0时范例。再次基础上,如果真实值与预测值一致,则是真的,反之为假的。这样就构成了上述四种评价指标。



根据上述的四种评价,我们可以组合成有意义的评价指标

•TPR(Recall,召回率):TP/(TP + FN),表示检测率,在所有实际值为1的样本中,被正确预测为1的比率

•Precision(精确率): TP/(TP + FP) ,在所有预测值为1的样本中,被正确预测的比例

•FPR: FP/(TN+FP),在所有实际值是0的样本中,被错误地预测为1的比例。

•F1

将召回率和精确率用一个数值表示,即F1



sklearn.metrics中包含常用的评价指标

1.求准确率

即所有预测值为1的样本中,被正确预测的比例


accuracy_score(y_true, y_pred, normalize=True, sample_weight=None)


参数:


y_true :验证集

y_pred :分类器的返回值

normalize:默认值为True,返回正确分类的比例;如果为False,返回正确分类的样本数

2.求精确率

即所有预测值为1的样本中,被正确预测的比例


precision_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)


3.求召回率,表示的是检测率

即在所有实际值为1的样本中,被正确预测为1的比例


(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)


参数:


average : string, [None, ‘micro’, ‘macro’(default), ‘samples’, ‘weighted’]

将一个二分类matrics拓展到多分类或多标签问题时,我们可以将数据看成多个二分类问题的集合,每个类都是一个二分类。接着,我们可以通过跨多个分类计算每个二分类metrics得分的均值,这在一些情况下很有用。你可以使用average参数来指定。

macro:计算二分类metrics的均值,为每个类给出相同权重的分值。当小类很重要时会出问题,因为该macro-averging方法是对性能的平均。另一方面,该方法假设所有分类都是一样重要的,因此macro-averaging方法会对小类的性能影响很大。

weighted:对于不均衡数量的类来说,计算二分类metrics的平均,通过在每个类的score上进行加权实现。

micro:给出了每个样本类以及它对整个metrics的贡献的pair(sample-weight),而非对整个类的metrics求和,它会每个类的metrics上的权重及因子进行求和,来计算整个份额。Micro-averaging方法在多标签(multilabel)问题中设置,包含多分类,此时,大类将被忽略。

samples:应用在multilabel问题上。它不会计算每个类,相反,它会在评估数据中,通过计算真实类和预测类的差异的metrics,来求平均(sample_weight-weighted)

average:average=None将返回一个数组,它包含了每个类的得分.

4.求F1


f1_score(y_true, y_pred, labels=None, pos_label=1, average=’binary’, sample_weight=None)


举个例子

k = 1

# 把水果识别转换为二分类问题

y_train_binary = y_train.copy() #备份训练集的预测值y

y_test_binary = y_test.copy() #备份测试集的预测值y

#y值不是1就将其赋值为0,也就是预测值y只可能是1和0,把原来的四分类问题转成了2分类问题。

y_train_binary[y_train_binary != 1] = 0

y_test_binary[y_test_binary != 1] = 0

# 用KNN进行学习

knn = KNeighborsClassifier(k)

knn.fit(X_train_scaled, y_train_binary)

y_pred = knn.predict(X_test_scaled)

根据用knn学习出来的模型求准确率,精确率,召回率和F1值


from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score


# 准确率

print('准确率:{:.3f}'.format(accuracy_score(y_test_binary, y_pred)))

# 精确率

print('精确率:{:.3f}'.format(precision_score(y_test_binary, y_pred)))

# 召回率

print('召回率:{:.3f}'.format(recall_score(y_test_binary, y_pred)))

# F1值

print('F1值:{:.3f}'.format(f1_score(y_test_binary, y_pred)))

Precision-Recall Curve (PR曲线)

1.x轴:recall, y轴:precision(可交换)

2.右上角是“最理想”的点,precision=1.0, recall=1.0

3.sklearn关于PR曲线的函数

①求PR曲线的Recall值和Precision值 precision_recall_curve()


sklearn.metrics.precision_recall_curve(y_true, probas_pred, pos_label=None, sample_weight=None)

举个例子

from sklearn.metrics import precision_recall_curve, average_precision_score

# 求precision和recall值

precision, recall, _ = precision_recall_curve(y_test, y_pred)

#求AP值

print('AP值:{:.3f}'.format(average_precision_score(y_test_binary, y_pred)))

如何用sklearn绘制PR曲线

http://scikit-learn.org/stable/auto_examples/model_selection/plot_precision_recall.html


Receiver Operating Characteristic Curve (ROC曲线)

1.x轴:FPR, y轴:TPR

2.左上角是“最理想”的点,FPR=0.0, TPR=1.0


3.AUC

AUC的值就是ROC曲线下的面积,它的取值范围为0到1之间

•0.5 < AUC < 1,优于随机猜测。这个分类器(模型)妥善设定阈值的话,能有预测价值。

•AUC = 0.5,跟随机猜测一样(例:丢铜板),模型没有预测价值。

•AUC < 0.5,比随机猜测还差;但只要总是反预测而行,就优于随机猜测。

4.sklearn中关于ROC曲线 函数

①roc_curve() 求fpr和tpr的值


sklearn.metrics.roc_curve(y_true, y_score, pos_label=None, sample_weight=None, drop_intermediate=True)


②roc_auc_score() 求AUC值


roc_auc_score(y_true, y_score, average=’macro’, sample_weight=None)


③ 如何绘制ROC曲线

http://scikit-learn.org/stable/auto_examples/model_selection/plot_roc_crossval.html

举个例子:

from sklearn.metrics import roc_auc_score, roc_curve

fpr, tpr, _ = roc_curve(y_test, y_pred) #求fpr和tpr

print('AUC值:{:.3f}'.format(roc_auc_score(y_test_binary, y_pred))) #求ROC值

混淆矩阵(confusion matrix)

1.混淆矩阵可用于多分类模型的评价


上图为一个分类模型的混淆矩阵,预测正确的类别就在此类别的对角线处,预测不对的会在对应的预测错的那个类别的位置,并且矩阵上会标明预测成这个类别的比例。


2.在sklearn使用混淆矩阵


①得到混淆矩阵confusion_matrix()


sklearn.metrics.confusion_matrix(y_true, y_pred, labels=None, sample_weight=None)


参数:

- y_true:真实因变量值

- y_pred:预测因变量值

- labels:矩阵的标签列表索引顺序

- sample_weight:样本权重

输出:

一个矩阵,shape=[y中的类型数,y中的类型数]


②输出每个分类上的概率值 predict_prob


例子

输出混淆矩阵


from sklearn.metrics import confusion_matrix


y_pred = best_model.predict(X_test_scaled)

cm = confusion_matrix(y_test, y_pred)

print(cm)


结果:

[[0 4 0 0]

[0 1 0 0]

[0 8 0 0]

[0 2 0 0]]

绘制混淆矩阵


plt.figure()

plt.grid(False)

plt.imshow(cm, cmap='jet')

plt.colorbar()


回归模型常用的评价指标

•sklearn.metrics.r2_score()

•sklearn.metrics.mean_absolute_error() •sklearn.metrics.mean_squared_error() •sklearn.metrics.median_absolute_error()