机器学习(4)——模型选择与校验

一、模型选择

1、机器学习分类
监督学习:
分类: k-近邻算法、决策树、贝叶斯、逻辑回归(LR)、支持向量机(SVM)
回归: 线性回归、岭回归
标注: 隐马尔可夫模型(HMM)

无监督学习:
聚类: k-means等

2、监督学习中三类问题的解释

(1)分类问题
分类是监督学习的一个核心问题,在监督学习中,当输出变量取有限个离散值时,预测问题变成为分类问题。这时,输入变量可以是离散的,也可以是连续的。监督学习从数据中学习一个分类模型或分类决策函数,称为分类器。分类器对新的输入进行输出的预测,称为分类。最基础的便是二分类问题,即判断是非,从两个类别中选择一个作为预测结果;除此之外还有多分类的问题,即在多于两个类别中选择一个。

分类问题包括学习和分类两个过程,在学习过程中,根据已知的训练数据集利用有效的学习方法学习一个分类器,在分类过程中,利用学习的分类器对新的输入实例进行分类。

应用领域
例如,在银行业务中,可以构建一个客户分类模型,对客户贷款风险的大小进行分类;在网络安全领域,可以利用日志数据的分类对非法入侵进行检测;在图像处理中,分类可以用来检测图像中是否有人脸出现;在手写识别中,分类可以用于识别手写的数字;在互联网搜索中,网页的分类可以帮助网页的抓取、索引和排序,等等。

(2)回归问题
回归是监督学习的另一个重要问题。回归用于预测输入变量和输出变量之间的关系,特别是当初如变量的值发生变化时,输出变量的值随之发生的变化。回归模型是表示从输入到输出变量之间映射的函数。

回归问题按照输入变量的个数,分为一元回归和多元回归;按照输入变量和输出变量之间关系的类型(即模型的类型),分为线性回归和非线性回归。

应用领域
例如,商务领域,作为市场趋势预测、产品质量管理、客户满意度调查、偷袭风险分析的工具。

(3)标注问题
标注也是一个监督学习问题。可以认为标注问题是分类问题的一个推广,标注问题又是更复杂的结构预测问题的简单形式。标注问题的输入是一个观测序列,输出是一个标记序列或状态序列。

应用领域
例如,信息抽取、自然语言处理等领域,是这些领域的基本问题。自然语言处理的词性标注就是一个典型的标注问题,即对一个单词序列预测其相应的词性标记序。

3、如何选择合适的算法模型?
在解决问题的时候,必须考虑下面两个问题:
(1)使用机器学习算法的目的。
如果想要预测目标变量的值,则可以选择监督学习算法,确定选择监督学习算法后,需要进一步确定目标变量类型,如果目标变量是离散型,如是/否、1/2/3,A/B/C/或者红/黑/黄等,则可以选择分类算法;如果目标变量是连续的数值,如0.0~100.0、-999~999等,则需要选择回归算法。

如果不想预测目标变量的值,则可以选择无监督算法。进一步分析是否需要将数据划分为离散的组。如果这是唯一的需求,则使用聚类算法
(在大多数情况下,上面的选择办法能选择恰当的机器学习算法,但这也并非一成不变,也有分类算法可以用于回归。)

(2)数据问题。
对实际数据了解的越充分,越容易创建符合实际需求的应用程序,我们主要应该了解数据的如下特性:特征值是 离散型变量 还是 连续型变量 ,特征值中是否存在缺失的值,何种原因造成缺失值,数据中是否存在异常值,某个特征发生的频率,等等。充分了解上面提到的这些数据特性可以缩短选择机器学习算法的时间。

二、模型检验

1、数据集划分
机器学习一般的数据集会划分为两个部分:
训练数据:用于训练,构建模型
测试数据:在模型检验时使用,用于评估模型效率

划分比例(一般):(训练数据)75%:(测试数据)25%

划分原因:
对应同一个数据集,如果将整个数据集用于训练(即训练准确度),会导致模型过拟合,由于每一个数据都经过训练,当使用该数据集的数据进行评估时,效率可能是百分之百,评估也就失去了意义。为此需要将数据集划分为训练集、测试集,训练集用于模型训练,测试集有用衡量模型预测表现能力(这种度量方式叫测试准确度),来有效避免过拟合。

2、train_test_split划分数据集
(sklearn 0.18已废弃 sklearn.cross_validation.train_test_split,请使用sklearn.model_selection.train_test_split)

sklearn.model_selection.train_test_split(*arrays, **options)
—arrays:允许的输入是列表,数字阵列(x 数据集的特征值 y 数据集的标签值)
—train_size 训练集的大小(0-1),一般为float
—test_size 测试集的大小(0-1),一般为float
—random_state 随机数种子,不同的种子会造成不同的随机 采样结果。相同的种子采样结果相同。
—return 返回 训练集特征值,测试集特征值,训练标签,测试标签 (默认随机取)

from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris

iris = load_iris()
X_train,X_test,y_train,y_test = train_test_split(iris.data,iris.target,test_size=0.4,random_state=42)
print(X_train.shape,y_train.shape)
print(X_test.shape,y_test.shape)
(90, 4) (90,)
(60, 4) (60,)

解释:
训练集与测试集默认比例为3:1

上面的方式有一定的局限,因为只进行一次测试,并不一定能代表模型的真实准确率。因为,模型的准确率和数据的切分有关系,在数据量不大的情况下,影响尤其突出。所以还需要一个比较好的解决方案。

3、交叉验证

(1)holdout method
评估模型泛化能力的典型方法是holdout交叉验证(holdout cross validation)。holdout方法很简单,我们只需要将原始数据集分割为训练集和测试集,前者用于训练模型,后者用于评估模型的性能。一般来说,Holdout 验证并非一种交叉验证,因为数据并没有交叉使用。 随机从最初的样本中选出部分,形成交叉验证数据,而剩余的就当做训练数据。 一般来说,少于原本样本三分之一的数据被选做验证数据,所以这种方法得到的结果其实并不具有说服性。

(2)k-折交叉验证
将数据集平均分成k等份,取一份作测试数据,其余作训练数据,计算准确率,重复k次,最后对测试准确率做平均,作为对未知数据预测准确率的估计。10折交叉验证是最常用的。

示例
在这里插入图片描述
上图是5折交叉验证,全部可用数据集分成五个集合,每次迭代都选其中的1个集合数据作为验证集,另外4个集合作为训练集,经过5组的迭代过程。交叉验证的好处在于,可以保证所有数据都有被训练和验证的机会,也尽最大可能让优化的模型性能表现的更加可信。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值