python skitlearn,python导入sklearn完整步骤
导读:深入理解机器学习,完整理解sklearn文档,需要深厚的理论基础。但是要将sklearn应用到实际项目中,只需要具备机器学习理论的基础知识,就可以直接调用它的API来完成各种机器学习问题。本文选自《全栈数据之门》,将向您介绍解决特定机器学习问题的三个步骤。
sklearn scikit简介-learn是一个用Python语言开发的机器学习库,一般简称为sklearn。目前是通用机器学习算法库中实现较好的库。它的完美不仅在于众多算法,还在于大量详实的文档和实例。文档简单易懂,可以作为机器学习的教程。如果说sklearn文献的重要性,我个人感觉应该堪比佛经中的《金刚经》。如果你能读成《金刚经》,你的机器学习水平肯定会有质的提升。一般初读佛经,会对其中的一些名词感到困惑。就像你第一次看sklearn文档的时候,会被训练数据、测试数据、模型选择、交叉验证等词汇搞糊涂一样。但其实只要你愿意认真阅读,理解这些基本概念,后面的学习会更容易。Sklearn一定要结合机器学习的一些基础理论来理解,就像佛经一定要结合佛教的一些基础理论来理解一样。由于是通用的机器学习库,sklearn包含了大量的常用算法。就像它的介绍,基本功能主要分为分类、回归、聚类、数据降维、模型选择、数据预处理六个部分,如下图所示。要深入理解机器学习,全面理解sklearn的文档,需要深厚的理论基础。但是要把sklearn应用到实际项目中,并不需要太多的理论知识。我们只需要一个机器学习理论的基础知识,就可以直接调用它的API来完成各种机器学习问题。对于特定的机器学习问题,通常可以分为三步:
数据准备和预处理、模型选择和训练、模型验证和参数调整。下面用一个具体的例子来介绍这三个步骤。
数据预处理在这个例子中,使用sklearn提供的虹膜数据进行演示,而使用kNN进行分类。有关kNN算法的详细信息,请参考“朱者赤附近,日期kNN”一节。使用load_Iris方法加载Iris数据。Iris是一个非常著名的公共数据集,它描述了iris的三个不同的亚类,有四个特征,分别是花萼的长和宽以及花瓣的长和宽。你不需要关注分哪三类,只需要知道类标签在数据中用0,1,2来表示就可以了。加载数据的代码如下:
% pysparkfrom sklearn.datasets从sklearn导入load _ iris . cross _ validation导入train _ test _ split # load Data iris=load _ iris()Data _ x=iris . Data _ y=iris . target #数据维度、特征和目标值的前三项print (data:,data _ x.shape,data _ y.shape) print (features:,data _ x [:3,]) print (target:) Data_y[:3])#数据分段train _ x,test _ x,train _ y, test _ y=train _ test _ split (data _ x,data _ y,test _ size=0.2) #训练数据和测试数据的维数print (train:,Train _ Train _ Y . shape)print( test:,test _ x.shape,test _ y.shape)加载数据的特征为data _ x,类别标签为data _ y,一般的命名约定是用大写的X表示特征是多维的,小写的Y表示目标值是一维的。 不同的命名习惯更符合以貌取人的特点。程序员不仅是人,也是智能的,所以也有这样的习惯。加载数据后,使用sklearn自带的train_test_split方法将数据分为训练数据train和测试数据test,特征和目标值分别命名为train_X、train_y、test_X和test_y。执行结果如下图所示。
在为建模和预测准备好数据之后,可以从neighbors类中导入kNN分类算法,其代码如下:
% pysparkfrom sklearn。邻居导入KNEIGHBORSCLASSIFIER #构建knn模型KNN=KNEIGHBORSCLASSIFIER(n _ neighbors=3,n _ jobs=-1) #拟合数据knn.fit(train_X,Train_y)#预测preds=knn。predict (test _ x) print (KNN模型:,KNN) print (first3ped:,preds [:3])使用两个用户定义的参数,n_neighbors(引用的邻居数)和n_jobs(使用的CPU核心数N_neighbors是KNN中最重要的参数,可以通过交叉验证设置一个合理的值。而n_jobs是sklearn中所有并行算法都会支持的参数。sklearn中的很多算法都可以在单台机器的所有CPU上进行并行运算。设置为-1意味着使用机器的所有CPU核心,或者可以设置为特定的数字值。然后用拟合的方法对训练数据进行拟合。kNN是一种监督学习算法,所以在拟合数据时,需要将已知的类别标签train_y和特征train_X输入到模型中进行数据拟合。在将模型拟合到训练数据之后,可以预测测试数据。预测方法用于预测测试的特征。因为特征是用来预测其类别的,所以这里不能导入测试数据的类别标签data test_y,这个标签在模型后期的评估中使用。打印knn模型会输出其用于构造的参数,或者打印出前三个预测值,如下图所示。在上述建模和预测过程中,sklearn简洁的API方法成为了现代机器学习库争相模仿的对象。甚至Spark的ML库也在学习这种简洁的方法,可以说几乎已经成为大众接受的标准方法。
模型评估评估模型的质量是机器学习中一项非常重要的任务。否则,我们无法评估模型的质量,也无法更好地优化模型。归根结底,所有的机器学习算法都是一堆数学运算,它们的预测值可以和标准值进行数学上的比较。在这一点上,它不同于教育中用来评价一个人能力的考试成绩,也不同于公司中用来评价一个人对公司贡献的KPI。在分类算法中,常用的评价指标包括准确率、召回率和F1值。前面构建的knn模型也有评分方法,可以对模型进行初步评价,其指标为F1-Score。当然,你也可以使用sklearn中提供的更多评价指标来评价模型。代码如下:
% pysparkfrom pprint import pprint #使用sklearn中测试打印的特征和目标值(knn.score(test_X,Test _ y))。度量导入precision _ recall _ fs core _ support #打印出三个指标分数=precision _ recall _ fs core _ support(test _ y,preds) pprint (scores)评估每一类数据的准确率、召回率和F-beta分数,结果如下图所示。
模型的持久性辛辛苦苦训练了一个模型之后,总希望以后能直接用上,所以模型的持久性是必须的。模型本身是一个Python对象。您可以使用pickle将模型转储到一个文件中,但是sklearn建议使用它的joblib接口。保存和加载模型非常简单:
Importlib #保存模型joblib.dump (model,/tmp/model . pkl )# load model=joblib . load(/tmp/model . pkl )。之前已经演示了一个完整的使用sklearn解决实际问题的例子。可以发现,如果只是调用sklearn的API,真的不需要太复杂的理论知识。学完上面的例子,你可能不知道kNN算法是怎么工作的,但是学习是分层次的。有些人可能认为只能调用API来实现,而不是真正的机器学习。的确,不了解kNN算法,就不清楚如何优化算法的参数。但我个人认为从sklearn开始机器学习入门是最好的方式,即使你之前从未接触过机器学习。按照我的理解,学习机器学习算法的三个层次如下。
调用:了解算法的基本思想,能够应用已有的库进行测试。简单来说就是知道kNN是做什么的,在sklearn中调用kNN算法。参数调整:了解算法的主要影响参数,能够对参数进行调整和优化。啃透:了解算法的实现细节,并能用代码实现。以上三关不押韵吗?但遗憾的是,有些人一上来就想达到第三级,所以一开始就被如何实现kNN算法吓到了,三天后从入门到放弃。作为应用型机器学习,能达到第三阶段就不错了,但在实际应用中,建议直接调用现有的库。不懂的地方,最好先了解源代码。不建议从零开始实施。除非能力真的足够,否则写出来的代码无法保证性能和准确性。当然,从另一个角度来说,尤其是在分布式环境下,机器学习还有另外三个层面。想知道的话请看《全栈数据之门》这本书。本文选自《全栈数据之门》。点击此链接可在官方网站,博客文章观点中查看该书。要及时获取更多精彩文章,可以在微信中搜索“博文观点”或扫描下方二维码关注。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。