机器学习是计算机人工智能的重要研究领域和应用方向,本书是学习和实践机器学习的入门教材,基于Python语言,介绍如何使用机器学习的相关算法对数据进行分析。本书在内容上涵盖机器学习相关基础知识,在组织编排上循序渐进。全书共11章,分为3个部分:第一部分(第1~3章)为机器学习基础知识,包括数值计算基础、数据分析、数据可视化;第二部分(第4~9章)为机器学习算法,包括线性模型、朴素贝叶斯、支持向量机、决策树、聚类分析和集成学习;第三部分(第10~11章)为实践项目,包括房价预测和手写数字识别,每章有5个相对独立的部分,方便教学使用。
吕焱飞(1978.5—),男,浙江东阳人,金华职业技术学院讲师、软件设计师,从事数学与计算机方面的教学科研工作二十余年。主讲课程包括高等数学、Java程序设计、机器学习、NoSQL数据库等。金华市"321专业技术人才工程”第三层次培养人员,金华职业技术学院"五个一批”精品课程《机器学习》负责人。
第1章 数值计算基础 1
1.1 Python基础 1
1.1.1 列表与元组 2
1.1.2 切片 3
1.1.3 列表推导 4
1.1.4 生成器表达式 5
1.2 NumPy数组 6
1.2.1 创建NumPy数组 6
1.2.2 数组的属性 6
1.2.3 reshape 7
1.2.4 Python列表与NumPy数组 7
1.2.5 创建特定数组 8
1.2.6 创建单调数组 9
1.2.7 生成随机数 9
1.3 NumPy索引 10
1.3.1 切片索引 10
1.3.2 布尔索引 11
1.3.3 更复杂的布尔索引 12
1.3.4 整数数组索引 12
1.3.5 索引赋值 13
1.4 多维索引 13
1.4.1 定位单个元素 13
1.4.2 多维切片 14
1.4.3 newaxis 14
1.4.4 Ellipsis 15
1.4.5 整数数组索引 16
1.5 广播 17
1.5.1 一个实例 17
1.5.2 广播的条件 18
1.5.3 如何广播 18
1.5.4 几个操作实例 19
1.5.5 原地修改 21
1.6 图像处理 22
1.6.1 导入 22
1.6.2 翻转 23
1.6.3 截取下半部分 23
1.6.4 缩小 24
1.6.5 纵向拉伸 24
1.6.6 遮罩 25
1.6.7 添加两条对角线 26
第2章 数据分析 27
2.1 Series 27
2.1.1 简单的Series 27
2.1.2 指定索引 28
2.1.3 索引的使用 28
2.1.4 将Python字典转换为Series 29
2.1.5 自定义索引 29
2.1.6 判断NA值 30
2.1.7 索引自动对齐 31
2.2 DataFrame 31
2.2.1 构建DataFrame 32
2.2.2 获取指定列 33
2.2.3 获取指定行 33
2.2.4 对列赋值 34
2.2.5 索引对齐 35
2.2.6 删除列 35
2.2.7 内部的ndarray 36
2.3 数据的选择 36
2.3.1 数据开放平台 36
2.3.2 导入数据 36
2.3.3 选择列 37
2.3.4 选择行 37
2.3.5 选择指定区域 38
2.3.6 布尔型数组 39
2.3.7 多个条件的选择 39
2.3.8 loc与iloc 40
2.4 概要与映射 41
2.4.1 查看数据头部 41
2.4.2 查看所有的列名 42
2.4.3 查看数据概要 42
2.4.4 计算数值的频率 42
2.4.5 与平均值的差 43
2.4.6 map的用法 43
2.4.7 apply的用法 44
2.4.8 map与apply的区别 45
2.5 分组与排序 45
2.5.1 导入数据 46
2.5.2 分组统计 47
2.5.3 分组最小值 47
2.5.4 用lambda函数做分组统计 48
2.5.5 更复杂的分组 49
2.5.6 同时使用多个聚合函数 49
2.5.7 分组后的排序 50
2.5.8 区分不同的apply函数 50
2.5.9 带“max”的函数 51
2.6 空值 51
2.6.1 FIFA数据集 51
2.6.2 查看空值的数量 52
2.6.3 计算空值的百分比 52
2.6.4 清除空值 52
2.6.6 清除带有空值的列 53
2.6.6 填充空值 53
2.6.7 用平均值来填充空值 55
2.6.8 返回值 56
2.7 不一致数据的处理 56
2.7.1 TheFuzz库 56
2.7.2 数据集 56
2.7.3 unique 57
2.7.4 清除大写与空格 57
2.7.5 模糊匹配 58
2.7.6 字段替换 59
第3章 数据可视化 60
3.1 Matplotlib基本概念 60
3.1.1 导入与设置 60
3.1.2 剖析图形 61
3.1.3 两种风格 63
3.2 作图基础 65
3.2.1 绘制直线 65
3.2.2 绘制折线 66
3.2.3 格式字符串 66
3.2.4 绘制散点图 67
3.2.5 绘制类别数据 68
3.2.6 绘制文本 69
3.2.7 绘制注解 70
3.3 MACD指标分析 71
3.3.1 加载贵州茅台股价数据 72
3.3.2 收盘价趋势图 72
3.3.3 计算MACD和signal序列 73
3.3.4 绘制MACD指标图 74
3.3.5 金叉与死叉 74
3.3.6 计算收益 76
3.4 沪深300收益计算 77
3.4.1 加载历史数据 77
3.4.2 绘制趋势图 78
3.4.3 计算收益率 78
3.4.4 计算年化收益率 79
3.4.5 计算年化波动率 80
3.4.6 计算最大回撤率 80
3.4.7 计算卡玛比率 81
3.5 日历策略 82
3.5.1 指标计算函数 82
3.5.2 只在每月前5日交易的策略 82
3.5.3 准备数据 82
3.5.4 标记出每月前5日 83
3.5.5 计算收益率 84
3.5.6 绘制两条收益曲线 84
3.5.7 比较收益指标 85
3.5.8 每月后5日的策略 85
第4章 线性模型 87
4.1 机器学习 87
4.1.1 传统软件与机器学习 87
4.1.2 特征与标签 88
4.1.3 机器学习算法的分类 88
4.1.4 CRISP-DM 89
4.2 线性回归 90
4.2.1 模型公式 91
4.2.2 scikit-learn 91
4.2.3 线性回归的用法 92
4.2.4 线性回归的参数 92
4.2.5 残差 93
4.2.6 均方误差与平均绝对误差 93
4.2.7 Bootstrap统计方法 94
4.3 岭回归 95
4.3.1 bootstrap函数 96
4.3.2 系数分布 97
4.3.3 alpha参数 99
4.3.4 最佳alpha参数 100
4.4 LASSO回归 101
4.4.1 基本用法 101
4.4.2 非零的系数 101
4.4.3 最佳alpha参数 102
4.4.4 特征选择 102
4.5 逻辑回归 103
4.5.1 iris数据集 103
4.5.2 训练集与测试集 104
4.5.3 LogisticRegression类 104
4.5.4 混淆矩阵 105
4.5.5 预测的概率 105
第5章 朴素贝叶斯 107
5.1 贝叶斯原理 107
5.1.1 患癌的概率 107
5.1.2 贝叶斯公式 108
5.1.3 朴素贝叶斯 108
5.1.4 sklearn中的朴素贝叶斯 109
5.2 TF-IDF 110
5.2.1 词项频率与文档频率 110
5.2.2 逆文档频率 110
5.2.3 TF-IDF 110
5.2.4 TfidfVectorizer 111
5.3 中文文档分类 112
5.3.1 中文分类数据集 112
5.3.2 jieba分词 113
5.3.3 加载文本 113
5.3.4 停用词表 114
5.3.5 计算TF-IDF权重 114
5.3.6 朴素贝叶斯分类器 115
第6章 支持向量机 116
6.1 支持向量 116
6.1.1 鸢尾花数据集 116
6.1.2 线性SVC 118
6.2 特征缩放 119
6.2.1 特殊的数据点 119
6.2.2 标准缩放 120
6.2.3 Pipeline类 121
6.3 多项式特征 122
6.3.1 生成数据集 122
6.3.2 添加多项式特征 123
6.3.3 应用实例 124
6.4 核函数 125
6.4.1 常用核函数 125
6.4.2 多项式核函数 125
6.4.3 高斯核函数 126
第7章 决策树 128
7.1 决策树原理 128
7.1.1 熵 128
7.1.2 信息增益 129
7.1.3 计算实例 129
7.1.4 基尼指数 130
7.2 DecisionTreeClassifier类 131
7.2.1 基本用法 131
7.2.2 展示决策树 131
7.3 决策树调参 133
7.3.1 GridSearchCV类 134
7.3.2 搜索结果 134
7.3.3 最大深度 135
第8章 聚类分析 136
8.1 聚类的基本概念 136
8.1.1 距离 136
8.1.2 K均值算法的核心思想 137
8.1.3 轮廓系数 137
8.2 K均值算法 137
8.2.1 生成数据集 137
8.2.2 KMeans类 138
8.2.3 样本点到中心点的距离 140
8.2.4 轮廓系数 140
8.2.5 最佳中心点个数 141
第9章 集成学习 143
9.1 集成学习原理 143
9.1.1 常用架构 143
9.1.2 提升法 144
9.1.3 装袋法 144
9.1.4 集成方法 144
9.2 随机森林 145
9.2.1 糖尿病数据集 145
9.2.2 分层抽样 145
9.2.3 RandomForestRegressor 145
9.2.4 特征重要性 146
9.3 BaggingRegressor 147
9.3.1 基本用法 147
9.3.2 参数说明 147
9.3.3 搜索最佳参数 147
9.3.4 最佳参数的效果 148
9.4 梯度提升决策树 149
9.4.1 房价数据集 149
9.4.2 初始参数集 150
9.4.3 最佳参数 150
9.4.4 最佳模型 152
9.4.5 增加预估器数量 152
第10章 房价预测 154
10.1 探索数据 154
10.1.1 加载数据 154
10.1.2 查看空值 155
10.1.3 属性的直方图 155
10.1.4 对收入中位数进行分组 157
10.1.5 分组统计 158
10.1.6 分层抽样 158
10.2 数据可视化与相关性 160
10.2.1 根据地理位置展示数据 160
10.2.2 相关关系 161
10.2.3 相关系数 163
10.2.4 3个新属性 163
10.3 空值的处理 164
10.3.1 列出有NaN的行 165
10.3.2 处理NaN 165
10.3.3 SimpleImputer类 166
10.4 文本属性与流式处理 167
10.4.1 文本属性 167
10.4.2 OrdinalEncoder转换器 167
10.4.3 OneHotEncoder类 168
10.4.4 流式处理 169
10.4.5 自定义Pipeline 170
10.4.6 ColumnTransformer 171
10.5 模型选择 171
10.5.1 分离标签 171
10.5.2 数值处理Pipeline 172
10.5.3 线性回归 173
10.5.4 决策树 173
10.5.5 随机森林 174
10.5.6 模型微调 174
10.5.7 最佳参数模型 175
第11章 手写数字识别 176
11.1 MNIST数据集 176
11.1.1 下载数据集 176
11.1.2 查看数据集 176
11.1.3 绘制数字图像 177
11.1.4 不易辨认的数字图像 178
11.1.5 识别数字5的分类器 179
11.2 精度与召回率 180
11.2.1 类型转换 180
11.2.2 二类分类器 180
11.2.3 非5分类器 181
11.2.4 混淆矩阵 181
11.2.5 计算精度与召回率 182
11.2.6 F1分数 183
11.3 阈值分类器 183
11.3.1 分类器评分 184
11.3.2 阈值的用法 184
11.3.3 计算精度与召回率 185
11.3.4 90%精度的分类器 187
11.4 ROC曲线 188
11.4.1 TPR与FPR 188
11.4.2 绘制ROC曲线 188
11.4.3 ROC曲线下的面积 189
11.4.4 RandomForestClassifier 189
11.4.5 比较ROC曲线 190
11.4.6 比较精度与召回率 191
11.4.7 比较F1分数 192
11.5 多类分类器 192
11.5.1 训练集与测试集 192
11.5.2 RandomForestClassifier 193
11.5.3 标准缩放 194
11.5.4 混淆矩阵 195
11.5.5 突出错误率 196