《scikit-learn机器学习常用算法原理及编程实战》—2.6.2 scikit-learn一般性原理和通用规则
2.6.2 scikit-learn一般性原理和通用规则
scikit-learn包含大部分流行的有监督学习算法(分类和回归)和无监督学习算法(聚类和数据降维)的实现。
1.评估模型对象
scikit-learn里的所有算法都以一个评估模型对象来对外提供接口。上面例子里的 svm.SVC()函数返回的就是一个支持向量机评估模型对象。创建评估模型对象时,可以指定不同的参数,这个称为评估对象参数,评估对象参数直接影响评估模型训练时的效率以及准确性。
读者可以试着修改上面例子里的clf = svm.SVC(gamma=0.001, C=100.)语句的参数值,看对模型准确度有没有影响。我们暂时忽略这些评估对象参数的意思,留在讲解每个机器学习算法时再详细介绍。
需要特别说明的是,我们学习机器学习算法的原理,其中一项非常重要的任务就是了解不同的机器学习算法有哪些可调参数,这些参数代表什么意思,对机器学习算法的性能以及准确性有没有什么影响。因为在工程应用上,要从头实现一个机器学习算法的可能性很低,除非是数值计算科学家。更多的情况下,是分析采集到的数据,根据数据特征选择合适的算法,并且调整算法的参数,从而实现算法效率和准确度之间的平衡。
2.模型接口
scikit-learn所有的评估模型对象都有fit()这个接口,这是用来训练模型的接口。针对有监督的机器学习(如上面的例子),使用fit(X, y)来进行训练,其中y是标记数据。针对无监督的机器学习算法,使用fit(X)来进行训练,因为无监督机器学习算法的数据集是没有标记的,不需要传入y。
针对所有的有监督机器学习算法,scikit-learn的模型对象提供了predict()接口,经过训练的模型,可以用这个接口来进行预测。针对分类问题,有些模型还提供了predict_ proba()的接口,用来输出一个待预测的数据,属于各种类型的可能性,而predict()接口直接返回了可能性最高的那个类别。
几乎所有的模型都提供了scroe()接口来评价一个模型的好坏,得分越高越好。需要说明的是,不是所有的问题都只有准确度这个评价标准,比如针对异常检测系统,一些产品不良率可以控制到10%以下,这个时候一个最简单的模型是无条件地全部预测为合格,即无条件返回1,其准确率将达99.999%以上,但实际上这是一个不好的模型。评价这种模型,就需要使用查准率和召回率来衡量。相关概念我们后面会详细介绍。
针对无监督的机器学习算法,scikit-learn的模型对象也提供了predict()接口,它是用来对数据进行聚类分析,即把新数据归入某个聚类里。除此之外,无监督学习算法还有 transform()接口,这个接口用来进行转换,比如使用PCA算法对数据进行降维处理时,把三维数据降为二维数据,此时调用transform()算法即可把一个三维数据转换为对应的二维数据。
模型接口也是scikit-learn工具包的最大优势之一,即把不同的算法抽象出来,对外提供一致的接口调用。
3.模型检验
机器学习应用开发的一个非常重要的方面就是模型检验,即需要检测我们训练出来的模型,针对“没见过的”陌生数据其预测准确性如何。除了模型提供的score()接口外,在sklearn.metrics包的下面有一系列用来检测模型性能的方法。
4.模型选择
模型选择是个非常重要的课题,根据要处理的问题性质,数据是否经过标记?数据规模多大?等等这些问题,可以对模型有个初步的选择。scikit-learn的官方网站上提供了一个模型速查表,只要回答几个简单的问题就可以选择一个相对合适的模型。感兴趣的读者可以搜索scikit-learn algorithm cheat sheet来查看这个图片,大概有个印象,等阅读完本书再回头看这张图片,感受一下自己对其理解的变化和收获。
- 点赞
- 收藏
- 关注作者
评论(0)