sklearn与分类算法

2023-11-14

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

01 逻辑回归 (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)
02 朴素贝叶斯

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

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]))
03 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))
04 支持向量机 (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
05 决策树

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

决策树的 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)                       
06 总结

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

转载自:微信公众号“人工智能头条”

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

sklearn与分类算法 的相关文章

随机推荐

  • [springmvc学习]8、JSR 303验证及其国际化

    目录 简介 常见注解 基本使用 BindResult获取异常信息 自定义提示信息 取消属性绑定 总结 简介 JSR 303 是 Java 为 Bean 数据合法性校验提供的标准框架 它已经包含在 JavaEE 中 我们可以通过注解的方式来指
  • SFTP报错,sftp couldn‘t stat remote file:No such file or directory

    原因 使用sftp进行文件传输时 需要连接到远程服务器的root用户上去 这就导致了另一个问题 在命令行使用su命令并输入root用户密码可以切换到root用户 但是使用sftp连接root用户 会连接失败 同类型的问题也有使用xshell
  • IDE介绍

    集成开发工具 gt gt gt IDE 编码工具取代了简单的记事本工具 辅助程序员编写源代码的常用高效编写工具 类似word 我们写文档会打开word文档来编写 代码也同样需要借助工具来开发 常见的编辑工具有记事本 sublime text
  • SD HOST——(一)SD简介

    Micro SD有九个引脚 TF卡只要八个 少一个地 CLK CMD 双向口 用于发命令和接收response VDD GND GND D3 D2 D1 D0 D3 D0不一定传输的是数据 读SD内部寄存器状态也可以从D3 30输出 CMD
  • Pytorch并行训练方法-单机多卡

    简单方便的 nn DataParallel DataParallel 可以帮助我们 使用单进程控 将模型和数据加载到多个 GPU 中 控制数据在 GPU 之间的流动 协同不同 GPU 上的模型进行并行训练 细粒度的方法有 scatter g
  • 通过栈实现算术表达式的计算

    最近在看数据结构的栈 其中有一节为栈应用到算术表达式的计算 接下来我讲举例说明如何用栈去计算 如有不对的地方 请各位大神指教 1 定义操作符的优先级 作为栈顶操作符时优先级仅高于 作为栈顶操作符时优先级是最高的 和 优先级一样 但是一个作为
  • redis-cluster集群添加或删除节点以及槽重新分片

    Redis版本 5 0 0 redis 5 0 0版本后可以不用安装ruby环境 集群命令说明 redis cli cluster help Cluster Manager Commands create host1 port1 hostN
  • LLVM 介绍

    https blog csdn net weixin 38244174 article details 82705181 最近开始搞LLVM 下面我将从以下五个方面来介绍LLVM 分别是 1 LLVM是什么 2 LLVM的组成部分 3 LL
  • Python爬虫教程(非常详细)从零基础入门到精通,看完这一篇就够了

    对于绝大多数想要学习Python的朋友而言 爬虫绝对是学习Python的最好的骑手和入门方式 我当时选择Python学习 也是瞄准了Python爬虫 因为爬虫思维模式固定 编程模式也相对简单 一般在细节处理上积累一些经验都可以成功 一 正确
  • __setup宏定义

    setup宏定义 struct obs kernel param const char str int setup func char int early define initconst section init rodata defin
  • QT程序自适应窗口大小

    作为QT菜鸟的一员 总是容易遇到各种问题 然后历经千辛万苦解决它 问题 我的程序需要在ARM板 Linux系统 上跑 也需要在PC Windows上 跑 他们拥有不同大小的屏幕 在程序中布局的界面能够很好地适应窗口的大小变化 但是在UI设计
  • HTTP协议实例详解

    HTTP是一个应用层协议 由请求和响应构成 是一个标准的客户端服务模型 HTTP通常承载于TCP协议之上 有时候也承载于TLS或SSL协议层之上 这个时候 就成了常说的HTTPS 默认HTTP的端口号为80 HTTPS的端口号为443 缺点
  • Netty聊天系统(1)通过自定义协议实现客户端与服务器端通信

    1 自定义实现客户端与服务器端通信的协议 1 1 通信协议的设计 自定义的通信协议需要哪些内容 1 魔数 第一个字段一般是魔数 一般固定的几个字节 一个PNG图片的编码中有固定数量固定内容的字节 用于表示这是一个PNG图片 Java的Cla
  • 百度搜索 抓取真实url

    现在的百度搜索url都是加密的 不是真实url 比如搜索豆瓣 复制链接地址得到的url如下 https www baidu com link url vsdsl04PUGwYT udMGNDBSgQ4D62grmcfm8fM4LVjYLVV
  • vue初始化项目出现 npm ERR fatal unable to access ‘httpsgithub.comnhnraphael.git‘ OpenSSL SSL_read

    vue初始化项目出现npm ERR fatal unable to access https github com nhn raphael git OpenSSL SSL read 错误 解决方法 没有安装预编译插件 我的项目是用sass
  • GM(1,1)灰色预测模型——详细过程与python实现

    文章目录 前言 一 灰色模型的建模步骤及原理 1 灰色模型的基本概念 2 灰色模型的建模步骤 二 模型建立 1 确定原始数据 2 累加数列和邻均值等权数列 3 建立关于t 的白化形式一阶一元微分方程 GM 1 1 三 模型求解 1 利用矩阵
  • Ubuntu的Firefox浏览器无法播放视频

    一 flash插件 sudo apt get install flashplugin installer 二 视频解码器 由于 ubuntu restrcited extras 软件包在 multiverse 仓库中 因此你应验证系统上已启
  • EClipse执行程序,提示:your project contains error(s),please fix them before running your application。

    今天电脑重新安装了Eclipse系统 JDK ADT SDK 然后打开1年多前编辑好的工程项目 结果总是会弹出错误框 提示信息为 Your project contains error s please fix them before ru
  • RabbitMQ的持久化 面试

    交换机的持久化 交换机的持久化其实就是相当于将交换机的属性在服务器内部保存 当MQ的服务器发生意外或关闭之后 重启RabbitMQ时不需要重新手动或执行代码去建立交换机 交换机会自动建立 相当于一直存在 其是在声明交换器的时候 将 dura
  • sklearn与分类算法

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