机器学习实战
机器学习课程讲义和PPT课件(含配套实战案例)

3
聚类算法
将数据按照相似性分组,如市场细分和社交网络分析。
监督学习和无监督学习
监督学习使用带有标记的数据来训练模型,无监督学习则使用未标记的数据 进行训练。
机器学习的评估方法
准确率: 模型预测与实际结果相符的比例。 召回率: 正确识别的样本数量与所有实际样本数量的比例。 F1值: 综合考虑准确率和召回率的度量指标。 交叉验证: 利用同一数据集进行重复实验,以平均得到更可靠的模型评估结果。
分类和回归的区别
1 分类
根据输入的特征将数据分为不同的类 别,如判断邮件是否为垃圾邮件。
2 回归
根据特征预测输出的连续值,如预测 房价。
SVMБайду номын сангаас持向量机
支持向量机是一种有效的分类和回归算法,通过最大化分类间隔来找到最佳 的决策边界。
决策树和随机森林
决策树
使用树形结构表示决策过程,每个节点代表一个 特征。
随机森林
由多个决策树组成的集成学习算法,通过投票来 作出最终预测。
神经网络与深度学习
神经网络是一种基于生物神经元的模型,深度学习则是利用多层神经网络来 解决复杂的问题。
机器学习课程讲义和PPT课件 (含配套实战案例)
为初学者提供全面的机器学习知识,从基础算法到实战案例全方位掌握。课 程内容涵盖监督学习、无监督学习、神经网络等核心模块。
什么是机器学习
机器学习是一种人工智能领域的应用,通过使用统计和算法模型,让计算机 从数据中学习并改善性能。
机器学习的应用领域
自然语言处理
使用机器学习技术来处理和理解自然语言, 如聊天机器人和语音识别。
图像识别
利用机器学习算法识别和分析图像中的对 象,如人脸识别和物体检测。
利用Python进行机器学习实战案例分析

利用Python进行机器学习实战案例分析Python是一种功能强大的编程语言,也是机器学习领域中广泛使用的工具。
通过利用Python进行机器学习实战案例分析,我们可以深入了解机器学习的原理和应用,并通过实际案例来加深对算法和模型的理解。
本文将介绍一些常见的机器学习算法和模型,并通过示例分析它们在实际问题中的应用。
在本文中,我将从数据准备、模型选择和评估等方面介绍机器学习实战的全过程。
一、数据准备在进行机器学习实战之前,我们首先需要准备好可用于训练和测试的数据。
通常情况下,数据需要经过清洗、处理和预处理等步骤,以便于后续的模型训练和评估。
在Python中,我们可以使用Pandas和NumPy等库来进行数据处理和预处理操作。
例如,我们打算使用一个汽车销售数据集来预测某汽车的售价。
我们首先需要导入这个数据集,并对数据进行一些基本的探索性分析,如查看数据的列名、数据类型、缺失值等情况。
然后,我们可以进行数据清洗,如删除重复值、填补缺失值、处理异常值等操作。
接下来,我们可以对数据进行特征工程,提取有效的特征并进行数据转换,如one-hot编码、标准化等。
二、模型选择与训练在数据准备完成后,我们可以选择合适的机器学习算法和模型来进行训练。
不同的问题可能需要不同的算法和模型,因此我们需要根据实际问题的特点来选择适用的方法。
以我们之前的汽车售价预测问题为例,我们可以选择使用线性回归模型进行训练。
在Python中,我们可以使用Scikit-learn库来实现线性回归模型的训练和预测。
在进行模型训练之前,我们需要将数据集划分为训练集和测试集。
训练集用于模型的训练和参数调整,而测试集则用于模型的评估和验证。
在划分数据集时,我们通常采用交叉验证的方法来提高模型的稳定性和泛化能力。
三、模型评估与优化在模型训练完成后,我们需要对模型进行评估和优化。
常用的评估指标包括均方误差(Mean Squared Error)、均方根误差(Root Mean Squared Error)、决定系数(R-squared)等。
Python机器学习实战使用Python实现机器学习算法和模型

Python机器学习实战使用Python实现机器学习算法和模型Python机器学习实战在当今数据时代,机器学习作为一种强大的技术工具,在各个领域都拥有广泛的应用。
而Python作为一种简单易用且功能强大的编程语言,成为了机器学习领域的首选工具。
本文将介绍如何使用Python实现机器学习算法和模型。
一、Python机器学习库的选择Python拥有众多优秀的机器学习库,如Scikit-learn、TensorFlow、PyTorch等。
在选择使用哪个库时,需根据具体的需求和任务来决定。
如果是进行传统的机器学习任务,比如分类、回归或聚类等,可以选择Scikit-learn;如果是进行深度学习任务,可以选择TensorFlow或PyTorch。
本文主要以Scikit-learn为例进行讲解。
二、数据预处理在进行机器学习之前,首先需要对数据进行预处理。
这包括数据清洗、缺失值处理、特征选择、特征缩放等步骤。
Scikit-learn提供了丰富的数据预处理工具,可以方便地进行数据处理。
三、特征工程特征工程是机器学习中非常重要的一环,它涉及到从原始数据中提取并构造出更有意义的特征。
Scikit-learn提供了一系列的特征工程方法,如特征编码、特征选择、特征降维等。
四、机器学习算法Scikit-learn提供了多种常见的机器学习算法,如线性回归、逻辑回归、决策树、随机森林等。
这些算法可以满足不同的任务需求,用户可以根据具体的问题选择合适的算法进行建模和训练。
五、模型评估与调优为了评估模型的性能,需要使用一些评估指标。
在分类问题中,可以使用准确率、召回率、F1值等指标;在回归问题中,可以使用均方误差(MSE)、均方根误差(RMSE)等指标。
通过对模型进行评估,可以进一步进行调优,以提高模型的性能。
六、模型保存与加载在机器学习任务中,通常需要将训练好的模型保存下来,以便使用或后续部署。
Scikit-learn提供了模型保存和加载的功能,可以方便地进行模型的导入和导出。
机器学习算法优化的实战案例分析

机器学习算法优化的实战案例分析机器学习的发展已经逐渐进入到了实战的阶段,为了在实际应用中得到更好的效果,需要对算法进行优化。
本文将从一个实战案例入手,详细分析机器学习算法的优化过程。
1. 案例简介本案例是一个用户行为预测的问题,目标是预测用户是否会购买某个商品。
我们可以将这个问题形式化描述为一个二分类问题,即判别一个用户是购买还是未购买。
这个问题可以使用多种机器学习算法进行解决,例如逻辑斯蒂回归,支持向量机等。
在实际应用中,经过对比实验,我们选择了朴素贝叶斯分类器来解决这个问题。
2. 朴素贝叶斯分类器朴素贝叶斯分类器是一种基于贝叶斯定理和特征条件独立假设的分类器。
它的基本思路是根据先验概率和特征的条件概率来计算后验概率,并选择概率最大的分类作为输出。
朴素贝叶斯分类器在实现简单高效的同时,也具有很好的分类性能。
3. 数据预处理在进行机器学习算法优化之前,需要进行数据预处理。
数据预处理是保证机器学习算法性能的关键步骤。
在本案例中,数据预处理步骤包括缺失值处理、离散化、特征选择和特征归一化等。
3.1 缺失值处理缺失值处理是指将数据集中的缺失值填充或删除。
在本案例中,我们选择了填充缺失值的方法。
填充缺失值可以使用多种算法,例如均值填充、中位数填充等。
在本案例中,我们选择了均值填充的方法。
3.2 离散化离散化是将连续特征转换为离散特征的过程。
常见的离散化算法有等深离散化和等宽离散化等。
在本案例中,我们选择了等宽离散化。
3.3 特征选择特征选择是从原始特征中选择出与目标变量有关的特征的过程。
常见的特征选择算法有过滤式、包裹式和嵌入式等。
在本案例中,我们选择了过滤式特征选择算法。
3.4 特征归一化特征归一化是将数据集中的特征统一转换为相同的规模范围内的过程。
常见的归一化算法有最大最小归一化和Z-score归一化等。
在本案例中,我们选择了最大最小归一化的方法。
4. 模型的优化在将经过预处理的数据输入到朴素贝叶斯分类器进行训练和测试之前,我们需要对模型进行优化。
机器学习实战案例

机器学习案例实战《机器学习案例实战》是2019年12月人民邮电出版社出版的图书,作者是赵卫东。
机器学习已经广泛地应用于各行各业,深度学习的兴起再次推动了人工智能的热潮。
本书结合项目实践,首先讨论了TensorFlow、PySpark、TI-ONE等主流机器学习平台的主要特点;然后结合Tableau 介绍了数据可视化在银行客户用卡行为分析的应用。
在此基础上,利用上述介绍的这些平台,通过多个项目案例,详细地分析了决策树、随机森林、支持向量机、逻辑回归、贝叶斯网络、卷积神经网络、循环神经网络、对抗生成网络等机器学习算法在金融、商业、汽车、电力等领域的应用。
本书内容深入浅出,提供了详细的 Python 代码,既可以作为从事机器学习、数据挖掘的相关研究人员的参考书,也可以作为高校相关专业机器学习、数据挖掘等课程的实验和实训教材。
《机器学习案例实战》目录如下:第1章常用机器学习平台. 11.1 常用机器学习工具11.2 TI-ONE 平台概述31.3 PySpark 介绍41.4 TI-ONE 机器学习平台主要的组件51.4.1 数据源组件 51.4.2 机器学习组件 61.4.3 输出组件101.4.4 模型评估组件11第 2章银行信用卡风险的可视化分析. 12 2.1 Tableau 简介132.2 用户信用等级影响因素132.3 用户消费情况对信用等级的影响.19 2.4 用户拖欠情况对信用等级的影响.24 2.5 欺诈用户特征分析27第3章贷款违约行为预测. 313.1 建立信用评估模型的必要性313.2 数据准备与预处理323.2.1 原始数据集333.2.2 基础表数据预处理363.2.3 多表合并403.3 模型选择.423.3.1 带正则项的Logistic 回归模型42 3.3.2 朴素贝叶斯模型423.3.3 随机森林模型423.3.4 SVM 模型433.4 TI-ONE 整体流程433.4.1 登录TI-ONE 443.4.2 输入工作流名称443.4.3 上传数据453.4.4 数据预处理463.4.5 拆分出验证集503.4.6 拆分出测试集513.4.7 模型训练和评估51第4章保险风险预测.614.1 背景介绍614.2 数据预处理634.2.1 数据加载与预览634.2.2 缺失值处理644.2.3 属性值的合并与连接654.2.4 数据转换664.2.5 数据标准化和归一化674.3 多维分析.674.4 基于神经网络模型预测保险风险.70 4.5 使用SVM 预测保险风险.74第5章银行客户流失预测805.1 问题描述805.2 数据上传.825.3 数据预处理835.3.1 非数值特征处理835.3.2 数据离散化处理835.3.3 数据筛选855.3.4 数据格式转化865.3.5 数据分割875.4 数据建模885.5 模型校验评估915.5.1 二分类算法评估915.5.2 ROC 曲线绘制. 925.5.3 决策树参数优化945.5.4 k 折交叉验证. 955.6 工作流的运行.955.7 算法性能比较.98第6章基于深度神经网络的股票预测100 6.1 股票趋势预测的背景和分析思路100 6.2 数据提取.1036.3 数据预处理1036.3.1 数据归一化1036.3.2 加窗处理1046.3.3 分割数据集1066.3.4 标签独热编码转化1066.4 模型训练.1066.5 算法评估.1106.6 算法比较.111第7章保险产品推荐1197.1 保险产品推荐的流程.120 7.2 数据提取.1217.2.1 上传原始文件1217.2.2 读取训练集和检验集122 7.3 数据预处理1247.3.1 去重和合并数据集1247.3.2 缺失值处理1257.3.3 特征选择1267.3.4 类型变量独热编码127 7.3.5 数值变量规范化1277.3.6 生成训练集和检验集128 7.4 构建保险预测模型1297.5 模型评估.131第8章零售商品销售预测. 133 8.1 问题分析.1338.2 数据探索.1358.2.1 上传原始数据1358.2.2 数据质量评估1368.3 数据预处理1398.3.1 填补缺失值1398.3.2 修正异常值1408.3.3 衍生字段1418.3.4 类型变量数值化和独热编码化142 8.3.5 数据导出1438.4 建立销售量预测模型.1438.4.1 线性回归模型1448.4.2 Ridge 回归模型. 1458.4.3 Lasso 回归模型. 1458.4.4 Elastic Net 回归模型. 1468.4.5 决策树回归模型1468.4.6 梯度提升树回归模型1478.4.7 随机森林回归模型1488.5 模型评估.148第9章汽车备件销售预测. 1519.1 数据理解.1519.2 数据分析流程.1529.2.1 设置数据源1529.2.2 数据预处理1559.2.3 建模分析与评估1589.3 聚类分析.162第 10章火力发电厂工业蒸汽量预测.166 10.1 确定业务问题.16610.2 数据理解.16610.3 工业蒸汽量的预测建模过程16710.3.1 设置数据源16810.3.2 数据预处理16810.3.3 建模分析与评估172第 11章图片风格转化.17911.1 CycleGAN 原理.18011.2 图片风格转化整体流程18211.2.1 设置数据源18311.2.2 数据预处理18411.2.3 模型训练18611.2.4 验证模型参数以及测试集19311.2.5 模型测试——转化图片风格19411.3 运行工作流19511.4 算法比较.19811.4.1 CycleGAN 与pix2pix 模型. 198 11.4.2 CycleGAN 与DistanceGAN 模型198 11.5 使用TensorFlow 实现图片风格转化.199 第 12章人类活动识别.20612.1 问题分析.20612.2 数据探索.20712.3 数据预处理20912.4 模型构建.21012.5 模型评估.214第 13章GRU 算法在基于Session 的推荐系统的应用221 13.1 问题分析.22113.2 数据探索与预处理22213.2.1 数据变换22313.2.2 数据过滤22313.2.3 数据分割22313.2.4 格式转换22413.3 构建GRU 模型22513.3.1 GRU 概述22513.3.2 构建GRU 推荐模型. 22613.4 模型评估.229第 14章人脸老化预测23314.1 问题分析与数据集简介23314.2 图片编码与GAN 设计.23414.3 模型实现.23514.4 实验分析.236第 15章出租车轨迹数据分析24315.1 数据获取.24415.2 数据预处理24615.3 数据分析.25215.3.1 出租车区域推荐以及交通管理建议25215.3.2 城市规划建议257第 16章城市声音分类.26116.1 数据准备与探索26116.2 数据特征提取.26816.3 构建城市声音分类模型27116.3.1 使用MLP 训练声音分类模型27116.3.2 使用LSTM 与GRU 网络训练声音分类模型. 273 16.3.3 使用CNN 训练声音分类模型27416.4 声音分类模型评估27516.4.1 MLP 网络性能评估27516.4.2 LSTM 与GRU 网络性能评估. 27616.4.3 CNN 性能评估277后记数据分析技能培养279参考文献. 282。
Java机器学习实战使用TensorFlow和Python进行数据分析

Java机器学习实战使用TensorFlow和Python进行数据分析机器学习在如今的科技领域中扮演着重要的角色,而Java作为一种广泛应用的编程语言,结合TensorFlow和Python等工具可以帮助我们在数据分析方面取得重大突破。
本文将介绍Java机器学习实战中如何使用TensorFlow和Python进行数据分析。
一、引言随着互联网和技术的不断发展,大量的数据被快速生成和积累,如何充分利用这些数据已成为企业和个人关注的焦点。
而机器学习是一种通过数据来训练模型,并根据模型进行预测和决策的技术。
其中TensorFlow作为一种开源的机器学习框架,提供了丰富的工具和库,而Python作为一种高级编程语言,具备数据分析和处理的能力,二者结合可以实现强大的数据分析功能。
二、Java机器学习实战1. 环境搭建首先,我们需要安装Java的开发环境以及TensorFlow和Python相关的软件。
Java的开发环境可以选择Eclipse或者IntelliJ IDEA等集成开发环境。
而TensorFlow和Python可以通过Anaconda进行安装,Anaconda是一个数据科学和机器学习的Python发行版本,提供了很多常用的数据处理和机器学习库。
2. 数据准备在进行数据分析前,我们需要准备好相应的数据集。
数据集可以从互联网上获取,也可以通过公司内部的数据库来获取。
在获取数据后,我们需要对数据进行预处理,包括数据清洗、数据转换、特征工程等。
3. 特征提取特征提取是机器学习中的重要步骤,它可以将原始数据转换为机器学习算法可以理解的特征向量。
在Java中,我们可以使用TensorFlow的Java API来进行特征提取。
TensorFlow提供了丰富的特征提取方法,包括卷积神经网络(CNN)、循环神经网络(RNN)等。
4. 模型训练在进行特征提取后,我们可以使用已经准备好的数据集对模型进行训练。
Java中的TensorFlow API可以帮助我们轻松地构建深度学习模型,包括卷积神经网络、循环神经网络、多层感知机等。
机器学习算法原理与实战应用

机器学习算法原理与实战应用机器学习(Machine Learning)是一种热门和重要的计算机科学领域,可用于数据挖掘、人工智能、自然语言处理等技术领域。
机器学习是一种通过算法,对大量的数据进行学习和分析,从而生成模型,从而能够预测未来数据的趋势和结论,从而帮助人们做出更好的决策。
在本文中,我们将学习机器学习算法的原理和实战应用。
机器学习算法的原理机器学习算法包括两种类型:有监督学习和无监督学习。
有监督学习是一种使用已知数据集中的样本(输入和输出)来训练机器模型的方法。
通过不断的学习和训练,机器学习模型会找到模式和关联,并且能够在未来的预测或新数据上执行任务。
无监督学习是一种不使用预定义输出的机器学习方法。
在无监督学习中,机器学习模型要找到一些未知的模式和关联,这些模式和关联可以用于进一步的分析和预测任务。
下面是机器学习算法的常见类型:1、线性回归模型(Linear Regression Model)线性回归模型是一种使用线性函数来建立输入变量(自变量)和输出变量(因变量)之间的关系的模型。
这种模型通常用于处理连续型数据,它可以用于预测一个输出结果,而不是用于分类任务。
2、逻辑回归模型(Logistic Regression Model)逻辑回归模型是一种用于解决二元分类问题的机器学习模型。
这种模型可以预测给定输入是否属于分类的一个类别,例如给出一张图片和它是否包含一只猫。
3、决策树模型(Decision Tree)决策树模型是一种使用树状结构来表示决策和概率的机器学习模型。
决策树模型将数据划分为不同的叶子节点来预测输出结果。
4、支持向量机模型(Support Vector Machines)支持向量机是一种用来分类数据的机器学习算法,它的基本思想是找到一个超平面,该超平面可以将不同的数据点分开。
5、聚类模型(Clustering Model)聚类模型是一种不需要监督学习的机器学习算法。
该算法可用于发现数据点之间的相似性,将相似的数据点分组到一起。
使用R进行数据挖掘和机器学习实战案例

使用R进行数据挖掘和机器学习实战案例引言在当今信息时代,大量的数据被生成和存储,这些数据蕴含了丰富的信息和价值。
然而,如何从这些海量数据中提取有用的信息仍然是一个具有挑战性的问题。
数据挖掘和机器学习技术的出现,为我们解决这个问题提供了一条可行的道路。
本文将使用R 语言为工具,介绍数据挖掘和机器学习的实战案例,并分为三个章节:数据预处理、数据挖掘和机器学习。
第一章:数据预处理在数据挖掘和机器学习之前,必须进行数据预处理,以清洗和准备数据,使其适合后续的分析和建模。
数据预处理步骤通常包括数据清洗、特征选择、特征缩放和数据转换等。
在R中,我们可以使用各种包和函数来处理数据。
例如,使用dplyr包可以对数据进行清洗和整理,使用tidyverse包可以进行特征选择,使用caret包可以进行特征缩放,使用reshape2包可以进行数据转换等。
通过这些功能强大的工具,我们可以在数据挖掘和机器学习之前对数据进行必要的预处理。
第二章:数据挖掘在数据预处理完成之后,接下来是数据挖掘的过程。
数据挖掘旨在发现数据背后的隐藏模式和关联规则,并提取有用的信息。
在R中,我们可以使用多种算法进行数据挖掘,如聚类分析、关联规则挖掘、时间序列分析等。
对于聚类分析,我们可以使用k-means算法、层次聚类算法等,在R中可以通过cluster包和stats包来实现。
关联规则挖掘可以使用Apriori算法和FP-Growth算法,在R中可以通过arules包和arulesSequences包来实现。
时间序列分析可以使用ARIMA模型和自回归平均滑动模型,在R中可以通过forecast包和stats包来实现。
通过这些算法和相应的R包,我们可以在数据中发现有用的模式和规律。
第三章:机器学习数据挖掘的结果往往是为了解决实际的问题或做出预测。
而机器学习就是通过利用数据的模式和规律来训练模型,并使用这些模型来做出预测或分类。
在R中,有许多机器学习算法和相应的包可以供我们选择。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
机器学习实战(用Scikit-learn和TensorFlow进行机器学习)一、简介Scikit-learn集成了很多机器学习需要使用的函数,学习Scikit-learn能简洁、快速写出机器学习程序。
并且通过代码更加深入的了解机器学习模型,学习如何处理数据,如何选择模型,如何选择和调整模型参数。
二、配置必要的环境1、推荐安装Anaconda(集成Python和很多有用的Package)2、编辑器:Spyder 或 Pycharm 或 Jupyter Notebook三、开始实战(处理CSV表格数据)1、下载数据数据集为房屋信息housing,代码运行后,会下载一个tgz文件,然后用tarfile解压,解压后目录中会有一个housing.scv文件(可以自行用excel打开看看),下载代码为:import osimport tarfilefrom six.moves import urllibDOWNLOAD_ROOT ="https:///ageron/handson-ml/master/"HOUSING_PATH = "datasets/housing"HOUSING_URL = DOWNLOAD_ROOT + HOUSING_PATH + "/housing.tgz"def fetch_housing_data(housing_url=HOUSING_URL,housing_path=HOUSING_PATH):if not os.path.isdir(housing_path):os.makedirs(housing_path)tgz_path = os.path.join(housing_path, "housing.tgz")urllib.request.urlretrieve(housing_url, tgz_path)housing_tgz = tarfile.open(tgz_path)housing_tgz.extractall(path=housing_path)housing_tgz.close()fetch_housing_data()2、读入数据通过panda库读取csv文件。
import pandas as pddef load_housing_data(housing_path=HOUSING_PATH):csv_path = os.path.join(housing_path, "housing.csv")return pd.read_csv(csv_path)housing = load_housing_data()3、观察数据载入数据以后,首先就是要观察数据是否成功导入,是否存在缺失值,是否存在异常值,数据的特征呈现何种分布等。
head()输出前5个数据和表头head()可以查看数据是否成功导入,并可以查看数据包含哪些特征以及特征的形式大概是怎么样的。
housing.head()输出结果info()输出每个特征的元素总个数以及类型信息等info()可以查看每个特征的元素总个数,因此可以查看某个特征是否存在缺失值。
还可以查看数据的类型以及内存占用情况。
()输出结果可以看到total_bedrooms特征总个数为20433,而不是20640,所以存在缺失值。
除了ocean_proximity为object类型(一般为一些文字label)以外,其余特征都为浮点型(float64)value_counts()统计特征中每个元素的总个数value_counts()一般用在统计有有限个元素的特征(如标签label,地区等)housing["ocean_proximity"].value_counts()输出结果可以看到ocean_proximity特征元素分为5类,以及每一类的总个数。
describe()可以看实数特征的统计信息describe()可以看实数特征的最大值、最小值、平均值、方差、总个数、25%,50%,75%小值。
housing.describe()输出结果其中count为总个数,mean为平均值,std为标准差,min为最小值,max为最大值,25%,50%,75%为第25%,50%,75%的最小值。
hist()输出实数域的直方图同过hist()生成直方图,能够查看实数特征元素的分布情况。
import matplotlib.pyplot as plthousing.hist(bins=50, figsize=(20,15))plt.show()输出结果可以看到第一个图的分布为两个峰;第二、三个图近似为长尾分布(Long-tailed distributions)。
需要注意:hist()函数需要配合matplotlib包使用4、分开训练和测试集为了最终验证模型是否具有推广泛化能力,需要分开训练集于测试集,假设将数据集分为80%训练,20%测试。
下面为一种普遍的分开数据集的代码:import numpy as npdef split_train_test(data, test_ratio):shuffled_indices = np.random.permutation(len(data))test_set_size = int(len(data) * test_ratio)test_indices = shuffled_indices[:test_set_size]train_indices = shuffled_indices[test_set_size:]return data.iloc[train_indices],data.iloc[test_indices]train_set, test_set = split_train_test(housing, 0.2)print(len(train_set), "train +", len(test_set),"test")这虽然能正确的分开训练、测试集,但是如果重新运行程序,训练和测试集会不一样。
假设在原来模型的基础上继续训练,则不能保证测试集没有被模型训练过,因此不能验证模型效果。
下面有两种方案:方案一:使用在shuffle之前(即permutation),调用np.random.seed(42),则每次运行shuffle的结果一样(即训练、测试集一样)。
但是如果新增加了一些数据集,则这个方案将不可用。
方案二:为了解决方案一的问题,采用每个样本的识别码(可以是ID,可以是行号)来决定是否放入测试集,例如计算识别码的hash值,取hash值得最后一个字节(0~255),如果该值小于一个数(20% * 256)则放入测试集。
这样,这20%的数据不会包含训练过的样本。
具体代码如下:def test_set_check(identifier, test_ratio, hash):return hash(np.int64(identifier)).digest()[-1] < 256 *test_ratiodef split_train_test_by_id(data, test_ratio,id_column, hash=hashlib.md5):ids = data[id_column]in_test_set = ids.apply(lambda id_:test_set_check(id_, test_ratio, hash))return data.loc[~in_test_set], data.loc[in_test_set]housing_with_id = housing.reset_index() # adds an`index` columntrain_set, test_set =split_train_test_by_id(housing_with_id, 0.2, "index")如果用行号作识别码,需要保证新的数据放在之前的数据以后,而且没有行被删除。
如果没有办法做到以上两条准则,则可以应该使用更加稳定的特征作为识别码,例如一个地区的经纬度(longitude 和 latitude)。
housing_with_id["id"] = housing["longitude"] * 1000 +housing["latitude"]train_set, test_set =split_train_test_by_id(housing_with_id, 0.2, "id")简洁、方便的Scikit-Learn 也提供了相关的分开训练和测试集的函数。
from sklearn.model_selection import train_test_splittrain_set, test_set = train_test_split(housing,test_size=0.2, random_state=42)参数和之前几乎相同,random_state为0或没有时为每次随机的情况,42时为seed的情况。
需要注意:如果没有找到model_selection,请将sklearn更新到最新版本(pip install -U sklearn)由于上面的情况都只是考虑纯随机采样,如果样本很大,则能表现良好,如果样本比较少,则会有采样偏差的风险。
比如要对1000个人做问卷调查,社会人口男女比例为51.3%和48.7%,则采样人数按照这个比例,则应该为513和487,这就是分层采样。
如果纯随机采样(即上述按行号,识别码的随机采样),则有12%的可能测试集中女性少于49%或男性多于54%。
这样的话就会产生采样偏差。
因此sklearn提供了另一个函数StratifiedShuffleSplit(分层随机采样)继续从真实数据来看,假设专家告诉你median_income 是用于预测median housing price 一个很重要的特征,则你想把median_income作为划分的准则来观察不同的median_income对median housing price的影响。
但是可以看到median_income是连续实数值。
所以需要把median_income变为类别属性。
根据之前显示的图标表,除以1.5界分为5类,除了以后大于5的归为5,下面图片可以上述说过的hist()函数画出来看看,对比一下原来的median_income的分布,看是否相差较大,如果较大,则界需要调整。