给大家拓宽点边界,15分钟带你入门sklearn与机器学习——分类算法篇
我经常和大家提过,不要给自己设限,这不仅包括技术设限,还有领域设限。那今天我就给大家分享一些关于机器学习的东西,不用你弄懂原理,记住那些专业名词,起码知道怎么回事,别人说的时候你也算半个魂在了。
【导读】众所周知,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_iris
from sklearn.linear_model import LogisticRegression
X, 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 datasets
iris = datasets.load_iris()
from sklearn.naive_bayes import GaussianNB
gnb = 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 np
X = np.random.randint(50, size=(1000, 100))
y = np.random.randint(6, size=(1000))
from sklearn.naive_bayes import MultinomialNB
clf = 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 np
X = np.random.randint(50, size=(1000, 100))
y = np.random.randint(6, size=(1000))
from sklearn.naive_bayes import ComplementNB
clf = ComplementNB()
clf.fit(X, y) print(clf.predict(X[2:3]))
4、伯努利朴素贝叶斯 (BernoulliNB)
BernoulliNB实现了基于多元伯努利分布的数据的朴素贝叶斯训练和分类算法。BernoulliNB可能在某些数据集上表现得更好,特别是那些文档较短的数据集。BernoulliNB的sklearn与上面介绍的算法接口相似。
案例:
import numpy as np
X = np.random.randint(50, size=(1000, 100))
y = np.random.randint(6, size=(1000))
from sklearn.naive_bayes import BernoulliNB
clf = 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 datasets
iris = datasets.load_iris() from sklearn.neighbors import KNeighborsClassifier
neigh = 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 np
X = np.array([[-1, -1], [-2, -1], [1, 1], [2, 1]])
y = np.array([1, 1, 2, 2])
from sklearn.svm import SVC
clf = 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 = 6 clf.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_iris
from sklearn.model_selection import cross_val_score
from sklearn.tree import DecisionTreeClassifier
clf = DecisionTreeClassifier(random_state=0)
iris = load_iris()
clf.fit(iris.data, iris.target) clf.predict(iris.data)
clf.predict_proba(iris.data)
总结
本文介绍了几种常见的机器学习分类算法,如逻辑回归,朴素贝叶斯,KNN,SVM,以及决策树算法。同时,也用sklearn的python接口展示了各个算法使用案例。小伙伴们是否学会了呢?
推荐阅读:
23个Python爬虫开源项目代码:微信、淘宝、豆瓣、知乎、微博等。我要做马来人
给大家拓宽点边界,15分钟带你入门sklearn与机器学习——分类算法篇相关推荐
- 15分钟带你入门sklearn与机器学习——分类算法篇
作者 | 何从庆 本文转载自AI算法之心(ID:AIHeartForYou) [导读]众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机 ...
- 15 分钟带你入门 sklearn 与机器学习(分类算法篇)
众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机器学习库.它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度增强,k-me ...
- Sklearn 损失函数如何应用到_15 分钟带你入门 sklearn 与机器学习(分类算法篇)...
众所周知,Scikit-learn(以前称为scikits.learn)是一个用于Python编程语言的免费软件机器学习库.它具有各种分类,回归和聚类算法,包括支持向量机,随机森林,梯度增强,k-me ...
- 8分钟带你入门人工智能,互联网大厂都在用的高能AI算法
哈喽,大家好,我是 Jack. 不少小伙伴问我,互联网大厂都在用哪些算法?有哪些算法值得学习? 这次,我做了一个视频,又剪了两周多,速度有点慢,但内容绝对充实. 主要是盘点一些互联网巨头,都在使用的人 ...
- Android 3分钟带你入门开发测试
本文首发于 vivo互联网技术 微信公众号 链接:https://mp.weixin.qq.com/s/-TW7p3z3vJ3GJw7X9u7dVg 作者:Zhu Yifei 作为一名合格的开发人员, ...
- 15 分钟搭建一个基于XLNET的文本分类模型——keras实战
今天笔者将简要介绍一下后bert 时代中一个又一比较重要的预训练的语言模型--XLNET ,下图是XLNET在中文问答数据集CMRC 2018数据集(哈工大讯飞联合实验室发布的中文机器阅读理解数据,形 ...
- a*算法matlab代码_10分钟带你入门MATLAB
10分钟带你快速入门MATLABhttps://www.zhihu.com/video/1234089282815188992 前一段时间我发现有些小伙伴MATLAB基础比较薄弱,今天我来让各位小 ...
- 15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)
前言 设计模式是一个程序员进阶高级的必备技巧,也是评判一个工程师工作经验和能力的试金石.设计模式是程序员多年工作经验的凝练和总结,能更大限度的优化代码以及对已有代码的合理重构.作为一名合格的前端工程师 ...
- 15分钟带你了解lower_bound和upper_bound
- JB的Shell之旅-30分钟带你入门
前言 写这篇文章的目的很简单,因为爱并恨过: 前段时间要改个安卓产品的脚本,惊奇发现理论是用shell,虽然实现的功能不复杂,但如果对没了解过shell或懂皮毛的同学,改起来是相当痛苦(如jb),调试 ...
最新文章
- 模板 - DP动态规划
- 边缘计算 — 与硬件厂商
- 消除 Xcode7 中 directory not found for option 'xxxx' 警告
- 141.Linked List Cycle
- 关于JSP与Int不得不说的故事
- 看看async,await 是如何简化异步的调用WCF!
- 【80万年薪】2019 互联网校招薪酬曝光,看你能拿到多少钱!
- 数据结构设计_数据结构算法设计题学起来很困难怎么破
- vcredist_x64.exe/vcredist_x86.exe的用处
- headerIP php_PHP正确获取客户端IP地址
- 手把手教你快速解除vivo手机高通系列屏幕锁(附短接拆机小视频)
- php令牌桶,令牌桶限频(TokenBucket)
- 行业研究的结构化分析方法:【PEST分析】实战案例
- HCIA—网络基本知识—双绞线(文字 + 图解)
- U盘文件夹变成应用程序
- webrtc 快速搭建 视频通话 视频会议
- MyBatis实现级联查询及逆向生成
- 陀螺仪mpu6050的使用(附带HAL的使用)
- 数据存储的声音 - 第9集:与Stephen Foskett的对话
- 动态web技术(二) --- CGI
热门文章
- 273. 整数转换英文表示
- 整型数字的英文表达和中文表达
- Figma常用快捷键(Mac版)
- 蛋花花分享人工智能概念的诞生与发展
- python取字母以及数字随机数
- Revisiting RCNN: On Awakening the Classification Power of Faster RCNN解读
- 海康 安全码 修改密码_「海康威视客户服务」“通道被锁定”“网络不可达”“未认证的设备”……NVR4.0 Lite通道专题来袭!...
- DAVE笔记--Micrium uc-Probo DashBoard调试
- 关于Pyrene-PEG2/PEG3/PEG4/PEG5-azide化学式,分子量等相关对比总结
- HDLBits学习笔记——移位寄存器