如何用Python处理分类和回归问题?附方法和代码

原创 2018年02月11日 17:36:51
  1. 编辑
  2. 删除
这里写图片描述
编译 | AI科技大本营
参与 | 王柯凝
编辑 | 明明
【AI科技大本营导读】继马斯克的重型火箭猎鹰火箭(Falcon Heavy)发射成功后,营长的朋友圈被持续刷屏,虽然特斯拉Roadster飞偏了,但不可否认未来是属于科技的,更是属于人工智能和机器学习的,任何一个不了解这些技术的人都会很快发现自己将落后于这个时代。 对于人工智能和机器学习来说,目前有很多种可以实施的技术和工具用来解决实时问题,其中,监督学习(Supervised Learning)是最常用的方法之一。什么是监督学习?监督学习如何实现呢?营长为大家找到了使用Python进行监督学习的方法。

什么是监督学习?

在监督学习中,首先导入包含训练属性和目标属性的数据集。然后,监督学习算法学习训练样本和与之相关的目标变量之间的关系,并利用所学习到的关系对全新的输入(没有目标)进行分类。 为了说明监督学习是如何工作的,我们来举一个例子:根据一个学生的学习小时数来预测他的考试分数。 在数学表达式上可表示为:Y = f(X)+ C,其中:
  1. f 表示考试分数和学生为考试所准备的小时数之间的关系;
  2. X 表示输入(准备的小时数);
  3. Y 表示输出(学生的考试分数);
  4. C 表示随机误差。
监督学习算法的最终目标是给定一个新的输入X,最大精度的预测Y。

实现监督学习最常用的方法

根据给定的数据集,机器学习问题可分为两类:分类和回归 如果给定的数据同时具有输入(训练)值和输出(目标)值,则是一个分类问题;如果给定数据集的属性是连续的值且没有任何目标标签,则是一个回归问题。 分类: 有输出标签,这是猫还是狗?
回归: 房子卖多少钱?

▌分类

举个例子:一位医学研究人员想要分析乳腺癌数据,来预测患者应该接受三种治疗方案中的哪一种。这个数据分析任务被称为分类,它构建一个模型或分类器来预测从属的类别标签,比如:“治疗方案A”,“治疗方案B”或“治疗方案C”。
分类是预测分类(离散、无序的)的类标号,分为两个过程:学习和分类。
分类的方法 一些常用的分类算法如下:
  1. K-近邻算法(KNN)
  2. 决策树算法
  3. 贝叶斯分类算法
  4. 支持向量机(SVM)
在学习过程中,分类模型通过分析训练集来构建分类器;在分类过程中,预测给定数据的分类标签。将待分析的数据集元组和与之相关联的类标签分成一个训练集和一个测试集。从待分析的数据集中随机抽样组成训练集的各个元组,剩下的元组形成测试集,并独立于训练集的元组,这就意味着测试集不会被用来构建分类器。 测试集用于评估分类器的预测正确率。分类器的正确率是分类器正确分类的测试元组所占得百分比。为了达到更高的正确率,最好的办法就是测试不同的算法,并在每个算法中尝试不同的参数。其中,最好的一个方法是交叉验证。 为了选择一个较好的算法来解决这个问题,对于不同的算法,必须考虑其正确率,训练时间,线性度,参数个数以及其他特殊情况。 在IRIS 数据集上,我们用Scikit-Learn库实现K-近邻法算法,根据给定的输入对花的类型进行分类。 为了应用机器学习算法,我们首先需要了解给定的数据集。在这个例子中,我们用的是从Scikit-Learn包中导入的IRIS数据集。现在,我们用代码来探索IRIS数据集的属性。 确保你的电脑上已经安装了Python。另外,使用PIP安装如下几个包: pip 安装 pandas pip 安装 matplotlib pip 安装 scikit-learn 在这段代码中,我们使用pandas包的几个方法了解IRIS数据集的属性。 输出: <class ‘sklearn.datasets.base.Bunch’> dict_keys([‘data’, ‘target’, ‘target_names’, ‘DESCR’, ‘feature_names’])] <classnumpy.ndarray’> <classnumpy.ndarray’> (150, 4) [‘setosa’ ‘versicolor’ ‘virginica’] sepal length (cm) sepal width (cm) petal length (cm) petal width (cm) 0 5.1 3.5 1.4 0.2 1 4.9 3.0 1.4 0.2 2 4.7 3.2 1.3 0.2 3 4.6 3.1 1.5 0.2 4 5.0 3.6 1.4 0.2 Scikit-Learn学习之K-近邻法 如果一个算法在只是简单的存储训练集元组,并一直等待,直到给定一个测试元组时才进行泛化, 根据其存储的训练元组的相似性进行分类,则称之为惰性学习。K-近邻分类器就是一种惰性学习。 K-近邻法基于类比进行学习,也就是说,将给定的测试元组和与之相似的训练元组相比较。将训练元组表示为n维空间中的一个点,这样,所有的训练元组将被存储在一个n维模式空间。当给定一个未知元组,K-近邻分类器搜索模式空间中最接进未知元组的K个训练元组,这K个训练元组即是这个未知元组的个K个“近邻”。 “贴近度”用来定义一个距离度量(如欧几里得距离)。一个合适的K值则需要根据实际情况而定。在这段代码中,我们从 sklearn 中导入K-近邻分类器,并将其用于我们输入的数据中,之后再对花进行分类。 输出: [1 1] 这里,0对应于Versicolor;1对应Virginic;2对应Setosa。根据给定的输入,机器预测两朵花都是Versicolor。 使用K-近邻法对IRIS数据集分类
这里写图片描述

▌回归

回归用来描述两个或更多变量之间的关系。例如:根据给定输入X,预测一个人的收入。 这里,目标变量指的是我们所关心的待预测的未知变量,连续是指Y的值之间不存在距离(不连续性)。 预测收入是一个典型的回归问题。输入数据应该包含可以预测收入的信息(称为特征),比如:工作时间,教育经历,职位,住所。 回归模型 常用的回归模型有:
  1. 线性回归
  2. Logistic回归
  3. 多项式回归
线性回归使用最佳拟合直线(也称回归线)建立因变量(Y)和一个或多个自变量(X)之间的关系。用数学表达式表示: h(xi)=βo+β1*xi+e 其中,βo是截距,β1是线的斜率,e是误差项。 图表显示为:
这里写图片描述

Logistic回归是一种用于响应变量是分类的算法,其思想是找出特征与特定结果概率之间的关系。用数学表达式表示:
p(X)=βo+β1*X 其中,p(x)=p(y=1|x) 图表显示为:
这里写图片描述
多项式回归是一种回归分析方法,其中自变量x和因变量y之间的关系被建模为x的一个n次多项式。 解决线性回归问题 我们有数据集X和相应的目标值Y,使用普通的最小二乘法学习一个线性模型,给定一个新的x,我们可以使用这个模型以尽可能小的误差来预测一个新的y。 将给定的数据集分成一个训练数据集和一个测试数据集。训练集具有标签(特征),因此算法可以从这些带有标注的例子从学习。测试不带有任何标签,也就是说,你还不知道预测值。 我们使用一个特征进行训练,并用线性回归方法来拟合训练数据,然后用测试数据集预测输出结果。 线性回归在Scikit-Learn中的实现 输出:
[ [ 0.07786339] [-0.03961813] [ 0.01103904] [-0.04069594] [-0.03422907] [ 0.00564998] [ 0.08864151] [-0.03315126] [-0.05686312] [-0.03099563] [ 0.05522933] [-0.06009656] [ 0.00133873] [-0.02345095] [-0.07410811] [ 0.01966154] [-0.01590626] [-0.01590626] [ 0.03906215] [-0.0730303 ] ] `` 预测的输出值: [
225.9732401 115.74763374 163.27610621 114.73638965 120.80385422
158.21988574 236.08568105 121.81509832
99.56772822 123.83758651 204.73711411 96.53399594
154.17490936 130.91629517 83.3878227 171.36605897
137.99500384 137.99500384 189.56845268 84.3990668
]
“`
这里写图片描述
表中(diabetes_X_test, diabetes_y_pred) 的预测在线性方程上是连续的。 作者 | Vihar Kurama
原文链接
————— 推荐阅读 —————

点击图片即可阅读
这里写图片描述
这里写图片描述
这里写图片描述
[ [ 0.07786339] [-0.03961813] [ 0.01103904] [-0.04069594] [-0.03422907] [ 0.00564998] [ 0.08864151] [-0.03315126] [-0.05686312] [-0.03099563] [ 0.05522933] [-0.06009656] [ 0.00133873] [-0.02345095] [-0.07410811] [ 0.01966154] [-0.01590626] [-0.01590626] [ 0.03906215] [-0.0730303 ] ] 预测的输出值: [ 225.9732401 115.74763374 163.27610621 114.73638965 120.80385422 158.21988574 236.08568105 121.81509832 99.56772822 123.83758651 204.73711411 96.53399594 154.17490936 130.91629517 83.3878227 171.36605897 137.99500384 137.99500384 189.56845268 84.3990668 ]
这里写图片描述
表中(diabetes_X_test, diabetes_y_pred) 的预测在线性方程上是连续的。 作者 | Vihar Kurama
原文链接
————— 推荐阅读 —————

点击图片即可阅读
这里写图片描述
这里写图片描述
这里写图片描述
版权声明:本文为博主原创文章,未经博主允许不得转载。
  1. 本文已收录于以下专栏:

机器学习中的回归(regression)与分类(classification)问题

分类模型和回归模型本质一样,分类模型是将回归模型的输出离散化。
  1. wspba
  2. wspba
  3. 2017年03月13日 20:49
  4. 5570

分类与回归的区别

在数据挖掘、人工智能等领域中存在两个:分类和回归。单说分类很容易理解,但想到回归就容易分不清晰,那么这两者到底有什么区别和联系呢?下面简单介绍下我的理解。 其实回归问题和分类问题的本质一样,都是...
  1. u013070853
  2. u013070853
  3. 2015年12月14日 20:19
  4. 4302

机器学习:分类与回归(classify and regression)

分类与回归问题 在用DBN作手写体识别实验的时候,hinton 2006年发表的论文 A fast learning Algorithm for deep belief nets所对应的代码,里面...
  1. oMengLiShuiXiang1234
  2. oMengLiShuiXiang1234
  3. 2015年12月10日 11:23
  4. 5013

机器学习系列(9)_机器学习算法一览(附Python和R代码)

写这篇文章的目的,就是希望它可以让有志于从事数据科学和机器学习的诸位在学习算法的路上少走些路。我会在文章中举例一些机器学习的问题,你们也可以在思考解决这些问题的过程中得到启发。我也会写下对于各种机器学...
  1. yaoqiang2011
  2. yaoqiang2011
  3. 2016年04月19日 16:04
  4. 33013

机器学习python处理文本数据 代码

#!/usr/bin/python# -*- coding: UTF-8 -*- import re from itertools import islice fin = open('/User...
  1. ecortc111
  2. ecortc111
  3. 2016年08月02日 19:20
  4. 374

分类和回归树,随机森林,霍夫森林

http://blog.163.com/huai_jing@126/blog/static/171861983201274102921423/ 分类和回归树,随机森林...
  1. wangyin159
  2. wangyin159
  3. 2015年06月26日 22:07
  4. 742

基于Python中theano库的线性回归(随机梯度下降)

基于Python中theano库的线性回归theano库是做deep learning重要的一部分,其最吸引人的地方之一是你给出符号化的公式之后,能自动生成导数。代码块import numpy as ...
  1. xujingpilot
  2. xujingpilot
  3. 2017年07月18日 15:04
  4. 244

【零一】如何用代码爬抓电商数据(附淘宝API调用实例)

http://bbs.paidai.com/topic/218843
  1. u013035103
  2. u013035103
  3. 2014年05月11日 22:41
  4. 1902

分类、标注与回归

1.分类问题 分类问题是监督学习的一个核心问题。在监督学习中,当输出变量YY取有限个离散值时,预测问题便成为分类问题。 监督学习从数据中学习一个分类决策函数或分类模型,称为分类器(clas...
  1. Losteng
  2. Losteng
  3. 2016年03月31日 15:47
  4. 1642

回归问题和评估分类器准确率

线性回归问题可以利用最小二乘法来确定误差,通过使误差最小化来确定线性方程的系数,而最小化可以通过求导来确定。 非线性方程可以通过变量替换等方式转化为线性方程 广义线性模型可以用于对离散取值变量进行...
  1. liucheng17
  2. liucheng17
  3. 2013年01月15日 20:49
  4. 4422
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何用Python处理分类和回归问题?附方法和代码
举报原因:
原因补充: (最多只允许输入30个字)
鸿运国际,鸿运国际娱乐官网,鸿运国际娱乐场