作者 | 何从庆

本文转载自AI算法之心(ID:AIHeartForYou)

【导读】众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机器学习库。它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度增强,k-means和DBSCAN,旨在与Python数值和科学库NumPy和SciPy互操作。本文将带你入门常见的机器学习分类算法——逻辑回归、朴素贝叶斯、KNN、SVM、决策树。

逻辑回归 (Logistic regression)

逻辑回归,尽管他的名字包含"回归",却是一个分类而不是回归的线性模型。逻辑回归在文献中也称为logit回归,最大熵分类或者对数线性分类器。下面将先介绍一下sklearn中逻辑回归的接口:

class sklearn.linear_model.LogisticRegression(penalty='l2', dual=False, tol=0.0001, C=1.0, fit_intercept=True, intercept_scaling=1, class_weight=None, random_state=None, solver='warn', max_iter=100, multi_class='warn', verbose=0, warm_start=False, n_jobs=None)

常用参数讲解:

penalty:惩罚项。一般都是"l1"或者"l2"。

dual:这个参数仅适用于使用liblinear求解器的"l2"惩罚项。 一般当样本数大于特征数时,这个参数置为False。

C:正则化强度(较小的值表示更强的正则化),必须是正的浮点数。

solver: 参数求解器。一般的有{‘newton-cg’, ‘lbfgs’, ‘liblinear’, ‘sag’, ‘saga’}。

multi_class:多分类问题转化,如果使用"ovr",则是将多分类问题转换成多个二分类为题看待;如果使用"multinomial",损失函数则会是整个概率分布的多项式拟合损失。

不常用的参数这里就不再介绍,想要了解细节介绍,可以sklearn的官网查看。

案例:

这里我使用sklearn内置的数据集——iris数据集,这是一个三分类的问题,下面我就使用逻辑回归来对其分类:

from sklearn.datasets import load_irisfrom sklearn.linear_model import LogisticRegressionX, y = load_iris(return_X_y=True)clf = LogisticRegression(random_state=0, solver='lbfgs', multi_class='multinomial').fit(X, y)

上面我就训练好了一个完整的逻辑回归模型,我们可以用predict这个函数对测试集进行预测。

clf.predict(X[:2, :])

如果想知道预测的概率,可以通过predict_proba这个函数来进行预测。

clf.predict_proba(X[:2, :])

如果想知道我们预测的准确性,可以通过score这个函数来判断我们的模型好坏。

clf.score(X, y)

朴素贝叶斯

朴素贝叶斯方法是一组基于贝叶斯定理的监督学习算法,在给定类变量值的情况下,朴素假设每对特征之间存在条件独立性。下面我将介绍几种朴素贝叶斯的方法。

1、高斯朴素贝叶斯 (GaussianNB)

高斯朴素贝叶斯的原理可以看这篇文章:

http://i.stanford.edu/pub/cstr/reports/cs/tr/79/773/CS-TR-79-773.pdf

这里,我将介绍如何使用sklearn来实现GaussianNB。

from sklearn import datasetsiris = datasets.load_iris()from sklearn.naive_bayes import GaussianNBgnb = GaussianNB()y_pred = gnb.fit(iris.data, iris.target).predict(iris.data)print("Number of mislabeled points out of a total %d points : %d" % (iris.data.shape[0],(iris.target != y_pred).sum()))

2、多项式朴素贝叶斯 (MultinomialNB/MNB)

这里我随机生成一组数据,然后使用MultinomialNB算法来学习。

import numpy as npX = np.random.randint(50, size=(1000, 100))y = np.random.randint(6, size=(1000))from sklearn.naive_bayes import MultinomialNBclf = MultinomialNB()clf.fit(X, y)print(clf.predict(X[2:3]))

3、 互补朴素贝叶斯 (ComplementNB/CMB)

ComplementNB是标准多项式朴素贝叶斯(MNB)算法的一种改进,特别适用于不平衡数据集。具体来说,ComplementNB使用来自每个类的补充的统计信息来计算模型的权重。CNB的发明者通过实验结果表明,CNB的参数估计比MNB的参数估计更稳定。此外,在文本分类任务上,CNB通常比MNB表现得更好(通常是相当大的优势)。

CNB的sklearn接口:

class sklearn.naive_bayes.ComplementNB(alpha=1.0, fit_prior=True, class_prior=None, norm=False)

常用参数讲解:

alpha:加性(拉普拉斯/Lidstone)平滑参数(无平滑为0)。

fit_prior:是否学习类先验概率。若为假,则使用统一先验。

class_prior :类的先验概率。如果指定,则不根据数据调整先验。

norm :是否执行权重的第二次标准化。

案例:

import numpy as npX = np.random.randint(50, size=(1000, 100))y = np.random.randint(6, size=(1000))from sklearn.naive_bayes import ComplementNBclf = ComplementNB()clf.fit(X, y)print(clf.predict(X[2:3]))

 4、伯努利朴素贝叶斯 (BernoulliNB)

BernoulliNB实现了基于多元伯努利分布的数据的朴素贝叶斯训练和分类算法。BernoulliNB可能在某些数据集上表现得更好,特别是那些文档较短的数据集。BernoulliNB的sklearn与上面介绍的算法接口相似。

案例:

import numpy as npX = np.random.randint(50, size=(1000, 100))y = np.random.randint(6, size=(1000))from sklearn.naive_bayes import BernoulliNBclf = BernoulliNB()clf.fit(X, Y)print(clf.predict(X[2:3]))

K-Nearest Neighbors (KNN)

KNN基于每个查询点的最近邻居来实现学习,其中k是用户指定的一个整数值。是最经典的机器学习算法之一。

KNN的skearn的接口如下:

class sklearn.neighbors.KNeighborsClassifier(n_neighbors=5, weights='uniform', algorithm='auto', leaf_size=30, p=2, metric='minkowski', metric_params=None, n_jobs=None, **kwargs)

常用参数讲解:

n_neighbors:邻居数,是KNN中最重要的参数。

algorithm:计算最近邻的算法,常用算法有{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}。

案例:

from sklearn import datasetsiris = datasets.load_iris()from sklearn.neighbors import KNeighborsClassifierneigh = KNeighborsClassifier(n_neighbors=3)neigh.fit(iris.data, iris.target) print(neigh.predict((iris.data))print(neigh.predict_proba((iris.data))

支持向量机 (SVM)

支持向量机(SVMs)是一套用于分类、回归和异常值检测的监督学习方法。这里我将只介绍分类方法。支持向量机的优点是:在高维空间中有效;在维数大于样本数的情况下仍然有效,因此对于小数据集,SVM可以表现出良好的性能。

SVM在sklearn上有三个接口,分别是 LinearSVC, SVC, 和 NuSVC。最常用的一般是SVC接口。

SVC的sklearn接口:

class sklearn.svm.SVC(C=1.0, kernel=’rbf’, degree=3, gamma=’auto_deprecated’, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=’ovr’, random_state=None)

常用参数讲解:

C : 错误项的惩罚参数C

kernel:核函数的选择。常用的核函数有:‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’。

probability :预测时是否使用概率估计。

案例:

import numpy as npX = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])y = np.array([1, 1, 2, 2])from sklearn.svm import SVCclf = SVC(C=1,kernel='rbf',gamma='auto')clf.fit(X, y) print(clf.predict([[-0.8, -1]]))

拓展:SVM解决二分类问题具有得天独厚的优势,然而对于解决多分类问题却很困难。常见的解决方案是“一对一”的方法解决多分类问题。具体地,假设 这个是一个 n_class的分类问题,则会构建 n_class*(n_class-1)/2个二分类,来解决这个多分类问题。

X = [[0], [1], [2], [3]]Y = [0, 1, 2, 3]clf = svm.SVC(gamma='scale', decision_function_shape='ovo')clf.fit(X, Y) dec = clf.decision_function([[1]])dec.shape[1] # 4 classes: 4*3/2 = 6clf.decision_function_shape = "ovr"dec = clf.decision_function([[1]])dec.shape[1] # 4 classes

决策树

决策树作为十大经典算法之一,能够很好的处理多分类问题。

决策树的sklearn接口:

class sklearn.tree.DecisionTreeClassifier(criterion=’gini’, splitter=’best’, max_depth=None, min_samples_split=2, min_samples_leaf=1, min_weight_fraction_leaf=0.0, max_features=None, random_state=None, max_leaf_nodes=None, min_impurity_decrease=0.0, min_impurity_split=None, class_weight=None, presort=False)

常用参数讲解:

criterion:该函数用于衡量分割的依据。常见的有"gini"用来计算基尼系数和"entropy"用来计算信息增益。

max_depth:树的最大深度。

min_samples_split:分割内部节点所需的最小样本数。

min_samples_leaf:叶节点上所需的最小样本数。

案例:

from sklearn.datasets import load_irisfrom sklearn.model_selection import cross_val_scorefrom sklearn.tree import DecisionTreeClassifierclf = DecisionTreeClassifier(random_state=0)iris = load_iris()clf.fit(iris.data, iris.target)clf.predict(iris.data)clf.predict_proba(iris.data)

总结

本文介绍了几种常见的机器学习分类算法,如逻辑回归朴素贝叶斯KNNSVM,以及决策树算法。同时,也用sklearn的python接口展示了各个算法使用案例。

(本文为 AI科技大本营转载文章,转载请微信联系原作者)

CTA核心技术及应用峰会

5月25-27日,由中国IT社区CSDN与数字经济人才发展中心联合主办的第一届CTA核心技术及应用峰会将在杭州国际博览中心隆重召开,峰会将围绕人工智能领域,邀请技术领航者,与开发者共同探讨机器学习和知识图谱的前沿研究及应用。

更多重磅嘉宾请识别海报二维码查看,目前会议早鸟票发售中(原票价1099元),点击阅读原文即刻抢购。添加小助手微信15101014297,备注“CTA”,了解票务以及会务详情。

推荐阅读

  • 人造器官新突破!美国科学家3D打印出会“呼吸”的肺 | Science

  • 如何确定最佳训练数据集规模?6 大必备“锦囊”全给你了

  • 如何在Python中轻松使用CVS,JSON,XML

  • 算法实现没思路?最全Python算法实现大礼包!(附学习资源)

  • 她说:为啥程序员都特想要机械键盘?这答案我服!

  • 互联网出海十年

  • 太形象了!什么是边缘计算?最有趣的解释没有之一!

  • 安全顾问反水成黑客, 靠瞎猜盗得5000万美元的以太币, 一个区块链大盗的另类传奇

  • 华为员工年薪 200 万!真相让人心酸!

15分钟带你入门sklearn与机器学习——分类算法篇相关推荐

  1. 15 分钟带你入门 sklearn 与机器学习(分类算法篇)

    众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机器学习库.它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度增强,k-me ...

  2. Sklearn 损失函数如何应用到_15 分钟带你入门 sklearn 与机器学习(分类算法篇)...

    众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机器学习库.它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度增强,k-me ...

  3. 8分钟带你入门人工智能,互联网大厂都在用的高能AI算法

    哈喽,大家好,我是 Jack. 不少小伙伴问我,互联网大厂都在用哪些算法?有哪些算法值得学习? 这次,我做了一个视频,又剪了两周多,速度有点慢,但内容绝对充实. 主要是盘点一些互联网巨头,都在使用的人 ...

  4. Android 3分钟带你入门开发测试

    本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/-TW7p3z3vJ3GJw7X9u7dVg 作者:Zhu Yifei 作为一名合格的开发人员, ...

  5. [转载] python机器学习第三章:使用scikit-learn实现机器学习分类算法

    参考链接: 使用Scikit-Learn在Python中进行embedding/投票分类 训练机器学习算法所涉及的五个主要步骤可以概述如下: 1.特征的选择 2.确定性能评价标准 3.选择分类器及其优 ...

  6. 来!一起捋一捋机器学习分类算法

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 来自:算法与数学之美 可是,你能够如数家珍地说出所有常用的分类算法,以及他们的特征.优 ...

  7. python分类算法的应用_Python基于sklearn库的分类算法简单应用示例

    Python基于sklearn库的分类算法简单应用示例 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  Python基于sklearn库的分类算法简单应用示例.tx ...

  8. sklearn实现KNN分类算法

    sklearn实现KNN分类算法 Pyhthon Sklearn 机器学习库提供了 neighbors 模块,该模块下提供了 KNN 算法的常用方法,如下所示: 类方法 说明 KNeighborsCl ...

  9. k近邻算法_机器学习分类算法之k近邻算法

    本编文章将介绍机器学习入门算法-k近邻算法,将会用demo演示机器学习分类算法. 在先介绍算法时,先回顾分类和回归的区别.像文章分类识别也是这样处理的,如1代表体育,2代表科技,3代表娱乐属于分类问题 ...

最新文章

  1. LigerUI 使用教程表格篇
  2. java怎么快速创建构造方法,详解系列文章
  3. 【工具】jira + dingding 任务状态改变发送自定义消息
  4. 十大经典排序算法之选择排序及其优化
  5. 在Windows 7上安装Team Foundation Server(TFS)的代理服务器(Agent)
  6. 伸展树(Splay tree)图解与实现
  7. pb string 接收dll按值返回_JavaScript 是如何工作的:JavaScript 的共享传递和按值传递...
  8. Qt Quick QMl学习笔记 之图片浏览器
  9. Python之math库
  10. CSS3动画框架 Animate.css
  11. 端口占用问题解决办法(以1099端口为例)
  12. 【QT学习之路】QThread的简单使用
  13. Java学习之贷款案例
  14. mysql数据库编程第六章试题_2016年计算机二级MySQL数据库试题及答案
  15. 条码打印工具-Bartender的使用
  16. 如何做一个基于微信积分商城小程序系统毕业设计毕设作品
  17. 嵌入式物联网系统软硬件基础知识大全
  18. 【牛客网-公司真题-前端入门篇】——百度2021校招Web前端研发工程师笔试卷(第二批)
  19. [科研][转载] 对科研思维方法的整理(节选) from 玉泉老博
  20. 七牛删除视频文件操作

热门文章

  1. poj_2479 动态规划
  2. java 它 引用(基本类型的包装,构造函数和析构函数c++不同)
  3. 在wamp环境下面安装Zend Optimizer的方法
  4. GNU/Linux平台上正则表达式的简单使用
  5. Bridge Pattern
  6. Java并发基础:了解无锁CAS就从源码分析
  7. 论文:贝叶斯优化算法和应用综述(2)--概率模型和采集函数的介绍以及综述列表
  8. 自己设计大学排名-数据库实践
  9. python基础类型
  10. Akka源码分析-Remote-发消息