监督学习的目标
利用一组带有标签的数据,学习从输入到输出的映射,然后将这种映射关系应用到未知数据上,达到分类或回归的目的。
分类:当输出是离散的,学习任务为分类任务。
回归:当输出是连续的,学习任务为回归任务。
分类学习
输入:一组有标签的训练数据(也称观察和评估),标签表明了这些数据(观察)的所署类别。
输出:分类模型根据这些训练数据,训练自己的模型参数,学习出一个适合这组数据的分类器,当有新数据(非训练数据)需要进行类别判断,就可以将这组新数据作为输入送给学好的分类器进行判断。
分类学习--评价
训练集(training set):顾名思义用来训练模型的已标注数据,用来建立模型,发现规律。
测试集(testing set):也是已标注数据,通常做法是将标注隐藏,输送给训练好的模型,通过结果与真实标注进行对比,评估模型的学习能力。
训练集/测试集的划分方法:根据已有标注数据,随机选出一部分数据(70%)数据作为训练数据,余下的作为测试数据,此外还有交叉验证法,自助法用来评估分类模型。
分类学习-评价标准
精确率:精确率是针对我们预测结果而言的,(以二分类为例)它表示的是预测为正的样本中有多少是真正的正样本。那么预测为正就有两种可能了,一种就是把正类(TP),另一种就是把负类预测为正类(FP),也就是
召回率:是针对我们原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。那也有两种可能,一种是把原来的正类预测成正类(TP),另一种就是把原来的正类预测为负类(FN),也就是
假设我们手上有60个正样本,40个负样本,我们要找出所有的正样本,分类算法查找出50个,其中只有40个是真正的正样本,TP:将正类预测为正类数40;将正类预测为负类数20;FP:将负类预测为正类数10;TN:将负类预测为负类数30
精确率(accuracy)=预测对的/所有 =(TP+TN)/(TP+FN+FP+TN) = 70%
精确率(precision)=?
召回率(recall)=?
SKlearn vs. 分类
分类算法的应用
金融:贷款是否批准进行评估
医疗诊断:判断一个肿瘤是恶性还是良性
欺诈检测:判断一笔银行的交易是否涉嫌欺诈
网页分类:判断网页的所属类别,财经或者是娱乐?
回归分析
回归:统计学分析数据的方法,目的在于了解俩个或多个变数间是否相关、研究其相关方向与强度,并建立数学模型以便观察特定变数来预测研究者感兴趣的变数。回归分析可以帮助人们了解在自变量变化时因变量的变化量。一般来说,通过回归分析我们可以由给出的自变量估计因变量的条件期望。
SKlearn vs. 回归
SKlearn提供的回归函数主要被封装在两个子模块中,分别是sklearn.linear_model和sklearn.preprocessing。
sklearn.linear_model1封装的是一些线性函数,线性回归函数包括有:
普通线性回归函数(LinearRegression)
岭回归(Ridge)
Lasso(Lasso)
非线性回归函数,如多项式回归(PolynomialFeatures)则通过sklearn.preprocessing子模块进行调用
回归应用
回归方法适合对一些带有时序信息的数据进行预测或者趋势拟合,常用在金融及其他涉及时间序列分析的领域:
股票趋势预测
交通流量预测
人体运动状态预测-实例分析
背景介绍
1.可穿戴式设备的流行,让我们可以更便利地使用传感器获取人体的各项数据,甚至生理数据。
2.当传感器采集到大量数据后,我们就可以通过对数据进行分析和建模,通过各项特征的数值进行用户状态的判断,根据用户所处的状态提供给用户更加精准、便利的服务。
数据介绍
1.我们现在收集了来自A,B,C,D,E 5位用户的可穿戴设备上的传感器数据,每位用户的数据集包含一个特征文件(a.feature)和一个标签文件(a.label) 。
2.特征文件中每一行对应一个时刻的所有传感器数值,标签文件中每行记录了和特征文件中对应时刻的标记过的用户姿态,两个文件的行数相同,相同行之间互相对应。
任务介绍
1.假设现在出现了一个新用户,但我们只有传感器采集的数据,那么该如何得到这个新用户的姿态呢?
2.又或者对同一用户如果传感器采集了新的数据,怎么样根据新的数据判断当前用户处于什么样的姿态呢?
在明确这是一个分类问题的情况下,我们可以选定某种分类模型(或者说是算法),通过使用训练数据进行模型学习,然后对每个测试样本给出对应的分类结果。
机器学习的分类算法众多,在接下来的学习中我们将会详细介绍经典的分类算法,如k近邻、决策树和朴素贝叶斯的原理和实现。
基本分类模型
sklearn中的k近邻分类器
在sklearn库中,可以使用sklearn.neighbors.KNeighborsClassifier创建一个K近邻分类器,主要参数有:
1.n_neighbors:用于指定分类器中K的大小(默认值为5,主意与kmeans的区别)
2.weights:设置选中的K个点对分类结果影响的权重(默认值为平均权重“uniform”,可以选择“distance”代表越近的点权重越高,或者传入自己编写的以距离为参数的权重计算函数)
3.algorithm:设置用于计算临近点的方法,因为当数据量很大的情况下计算当前点和所有点的距离在选出最近的k各点,这个计算量是很费时的,所以(选项中有ball_tree、kd_tree和brute,分别代表不同的寻找邻居的优化算法,默认值为auto,根据训练数据自动选择)
K近邻分类器的使用
KNN的使用经验
在实际使用时,我们可以使用所有训练数据构成特征x和标签y,使用fit()函数进行训练。在正式分类时,通过一次性构造测试集或者一个一个输入样本的方式,得到样本对应的分类结果。有关k的取值:
1.如果较大,相当于使用较大邻域中的训练实例进行预测,可以减小估计误差,但是距离较远的样本也会对预测起作用,导致预测错误。
2.相反地,如果k较小,相当于使用较小的邻域进行预测,如果邻居恰好是噪声点,会导致过拟合。
3.一般情况下,k会倾向选取较小的值,并使用交叉验证法选取最优k值。
决策树
1.决策树本质上是寻找一种对特征空间上的划分,旨在构建一个训练数据拟合的好,并且复杂度小的决策树
2.在实际使用中,需要根据数据情况,调整DecisionTreeClassfier类中传入的参数,比如选择合适的criterion,设置随机变量等。
朴素贝叶斯
朴素贝叶斯分类器是一个以贝叶斯定理为基础的多分类的分类器。
对于给定数据,首先基于特征的条件独立性假设,学习输入输出的联合概率分布,然后基于此模型,对给定的输入x,利用贝叶斯定理求出后验概率最大的输出y。
朴素贝叶斯
朴素贝叶斯是典型的生成学习方法,由训练数据学习联合概率分布,并求得后验概率分布。
朴素贝叶斯一般在小规模数据上的表现很好,适合进行多分类任务。
线性回归+房价与房屋尺寸关系的线性拟合
线性回归
线性回归(linear regression)是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法。
线性回归利用称为线性回归方程的最小平房函数对一个或多个自变量和因变量之间关系进行建模。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。
可行性分析
简单而直观的方式是通过数据的可视化直接观察房屋成交价格与房屋尺寸之间是否存在线性关系。
对于本实验的数据来说,散点图就可以很好的将其在二维平面中进行可视化表示。
实验过程
使用算法:线性回归
实现步骤:
1.建立工程并导入sklearn包
2.加载训练数据,建立回归方程
3.可视化处理
多项式回归+房价与房屋尺寸关系的非线性拟合
多项式回归
多项式回归(polynomial regression)是研究一个因变量与一个或多个自变量间多项式的回归分析方法。如果自变量只有一个时,称为一元多项式回归;如果自变量有多个时,称为多元多项式回归。
1.在一元回归分析中,如果自变量y与自变量x的关系为非线性的,但是又找不到适合的函数曲线来拟合,则可以采用一元多项式回归。
2.多项式回归的最大优点就是可以通过增加x的高次项对实测点进行逼近,直至满意为止。
3.事实上,多项式回归可以处理相当一类非线性问题,它在回归分析中占有重要的地位,因为任一函数都可以分段用多项式来逼近。
实验过程
使用算法:线性回归
实现步骤:
1.建立工程并导入sklearn包
2.加载训练数据,建立回归方程
3.可视化处理
岭回归及其应用实例
“手写识别”实例介绍
图像识别
图像识别(image recognition)是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对象的技术。
图像识别的发展经历了三个阶段:文字识别、数字图像处理与识别、物体识别。机器学习领域一般将此类识别问题转化为分类问题。
手写识别
手写识别是常见的图像识别任务。计算机通过手写体图片来识别出图片中的字,与印刷字体不同的是,不同人的手写体风格迥异,大小不一,造成了计算机对手写识别任务的一些困难。
数字手写体识别由于其有限的类别(0-9共10个数组)成为了相对简单的手写识别任务。DBRHD和MNIST是常用的两个数字手写识别数据集。
实例编写:神经网络实现‘手写识别’
任务介绍
手写数字识别是一个多分类问题,共有10个分类,每个手写数字图像的类别标签是0-9中的其中一个数。例如下面这三张图片的标签分别是0,1,2.
任务:利用sklearn来训练一个简单的全链接神经网络,即多层感知机(multilayer perceptron,MLP)用于识别数据集DBRHD的手写数字。
MLP输出:“one-hot vectors”
一个one-hot向量除了某一位的数字是1以外其余各维度数字都是0.
图片标签将表示成一个只有在第n维度(从0开始)数字为1的10维向量。比如,标签0将表示成[1,0,0,0,0,0,0,0,0,0,0].即,MLP输出层具有10个神经元。
MLP结构
MLP的输入与输出层,中间隐藏层的层数和神经元的个数设置都将影响该MLP模型的准确率。
在本实例中,我们只设置一层隐藏层,在后续实验中比较该隐藏层神经元个数为50、100、200时的MLP效果。
MLP手写识别实例构建
本实例的构建步骤如下:
步骤1:建立工程并导入sklearn包
步骤2:加载训练数据
步骤3:训练神经网络
步骤4:测试集评价
KNN实现‘手写识别’
任务介绍:
手写数字识别是一个多分类为题,共有10个分类,每个手写数字图像的类别标签是0-9中的其中一个数。例如下面这三张图片的标签分别是0,1,2.
本实例利用sklearn来训练一个k最近领(k-Nearest Neighbor,KNN)分类器,用于识别数据集DBRHD的手写数字。
比较KNN的识别效果与多层感知机的识别效果。