强大的机器学习建模扩展包:mlxtend

公众号:尤而小屋
编辑:Peter
作者:Peter

大家好,我是Peter~

今天给大家介绍一个强大的机器学习建模扩展包:mlxtend。

mlxtend(machine learning extensions,机器学习扩展)是一个用于日常数据分析、机器学习建模的有用Python库。

mlxtend可以用作模型的可解释性,包括统计评估、数据模式、图像提取等。mlxtend是一个Python第三方库,用于支持机器学习和数据分析任务。

本文关键词:机器学习、mlxtend、聚类、分类、回归、模型可视化

1 MLxtend主要功能

MLxtend主要功能包含:

  1. 数据处理
    • 数据:提供了数据集加载和预处理的功能,方便用户处理各种格式的数据集。
    • 预处理:包括数据清洗、标准化、归一化等,确保数据质量,提高模型性能等
  2. 特征选择
    • 基于特征重要性的方法:这种方法通过评估各个特征对模型预测能力的贡献度来选择特征。
    • 递归特征消除:这是一种通过递归地考虑越来越小的特征子集来选择特征的方法。
    • 基于特征子集搜索的方法:这种方法通过搜索最优特征子集来选择特征,通常使用启发式或优化技术来实现。
  3. 模型评估
    • 分类器:提供了多种分类算法的实现,帮助用户进行分类任务的建模和评估。
    • 聚类器:提供了多种聚类算法,用于无监督学习中的样本分组。
    • 回归器:提供了回归分析的工具,用于预测连续值输出。
    • 评估方法:提供了模型性能评估的方法,如交叉验证、得分指标等。
  4. 数据可视化
    • 绘图:提供了丰富的绘图功能,帮助用户在数据探索和分析过程中可视化数据分布和模型结果。
    • 图像:支持图像数据的处理和分析,扩展了机器学习在视觉领域的应用。

官方学习地址:https://rasbt.github.io/mlxtend/

2 导入库

In [1]:

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.gridspec as gridspec
import itertoolsfrom sklearn.linear_model import LogisticRegression # 逻辑回归分类
from sklearn.svm import SVC  # SVC
from sklearn.ensemble import RandomForestClassifier  # 随机森林分类
from mlxtend.classifier import EnsembleVoteClassifier  # 从mlxtend导入集成投票表决分类算法
from mlxtend.data import iris_data # 内置数据集
from mlxtend.plotting import plot_decision_regions  # 绘制决策边界import warnings
warnings.filterwarnings('ignore')

3 MLxtend分类案例

提供一个分类模型相关的入门案例:

3.1 导入数据

In [2]:

X, y = iris_data()
X = X[:, [0,2]]  # 所有行,选择2个列X[:3]

Out[2]:

array([[5.1, 1.4],[4.9, 1.4],[4.7, 1.3]])

In [3]:

y[:3]

Out[3]:

array([0, 0, 0])

3.2 初始化多个分类器

In [4]:

# 建立3个基线分类器
clf1 = LogisticRegression(random_state=0)
clf2 = RandomForestClassifier(random_state=0)
clf3 = SVC(random_state=0, probability=True)  # 输出概率值

3.3 使用集成投票表决分类器EnsembleVoteClassifier

In [5]:

eclf = EnsembleVoteClassifier(clfs=[clf1,clf2,clf3], # 使用3个基分类器weights=[2,1,1],  # 赋予权重voting="soft"  # 使用软投票方式
)

3.4 绘制决策边界

绘制分类器的决策边界:

In [6]:

list(itertools.product([0, 1],repeat=2))  # 计算笛卡尔积

Out[6]:

[(0, 0), (0, 1), (1, 0), (1, 1)]

In [7]:

labels = ['Logistic Regression','Random Forest','RBF kernel SVM','Ensemble']fig = plt.figure(figsize=(14, 10))
gs = gridspec.GridSpec(2, 2)for clf, lab, grd in zip([clf1, clf2, clf3, eclf], # 分类器labels,  # 分类器名称# 设置图片的位置:[0,0],[0,1],[1,0],[1,1]itertools.product([0, 1],repeat=2)):  clf.fit(X,y)ax = plt.subplot(gs[grd[0], grd[1]])  # 子图fig = plot_decision_regions(X=X,y=y,clf=clf,legend=2)plt.title(lab)  # 标题plt.show()

4 MLxtend回归案例

MLxtend内置了线性回归的算法LinearRegression

https://rasbt.github.io/mlxtend/user_guide/regressor/LinearRegression/

4.1 direct(默认)

LinearRegression类中有个参数method,取值不同:direct(默认)、qr(QR decomopisition)、svd(Singular Value Decomposition)、sgd(Stochastic Gradient Descent)

In [8]:

import numpy as np
import matplotlib.pyplot as plt
from mlxtend.regressor import LinearRegression# 模拟数据:从一维变成二维,使用np.newaxis函数
X = np.array([ 1.0, 2.1, 3.6, 4.2, 6])[:, np.newaxis]
y = np.array([ 1.0, 2.0, 3.0, 4.0, 5.0])ne_lr = LinearRegression()  # 默认方法
ne_lr.fit(X, y)#print('Intercept: %.2f' % ne_lr.b_)   # 截距
#print('Slope: %.2f' % ne_lr.w_[0])   # 斜率def lin_regplot(X, y, model):plt.scatter(X, y, c='blue')plt.plot(X, model.predict(X), color='red')    return Nonelin_regplot(X, y, ne_lr)
plt.show()

4.2 QR decomposition(QR分解)

In [9]:

import numpy as np
import matplotlib.pyplot as plt
from mlxtend.regressor import LinearRegressionX = np.array([ 1.0, 2.1, 3.6, 4.2, 6])[:, np.newaxis]
y = np.array([ 1.0, 2.0, 3.0, 4.0, 5.0])ne_lr = LinearRegression(method="qr")  # 
ne_lr.fit(X, y)def lin_regplot(X, y, model):plt.scatter(X, y, c='blue')plt.plot(X, model.predict(X), color='red')    return Nonelin_regplot(X, y, ne_lr)
plt.show()

4.3 Gradient Descent-梯度下降

In [10]:

import numpy as np
import matplotlib.pyplot as plt
from mlxtend.regressor import LinearRegressionX = np.array([ 1.0, 2.1, 3.6, 4.2, 6])[:, np.newaxis]
y = np.array([ 1.0, 2.0, 3.0, 4.0, 5.0])gd_lr = LinearRegression(method='sgd',eta=0.005, epochs=100,minibatches=1,  # 必须和method="sgd"联用random_seed=123,print_progress=3)
gd_lr.fit(X, y)def lin_regplot(X, y, model):plt.scatter(X, y, c='blue')plt.plot(X, model.predict(X), color='red')    returnlin_regplot(X, y, gd_lr)
plt.show()

绘制损失函数值cost随迭代次数epochs的变化情况:

In [11]:

plt.plot(range(1, gd_lr.epochs+1), gd_lr.cost_)
plt.xlabel('Epochs')
plt.ylabel('Cost')plt.ylim([0, 0.2])
plt.tight_layout()
plt.show()    

5 MLxtend聚类案例

mlxtend内置的是K-means算法

5.1 导入数据

In [12]:

import matplotlib.pyplot as plt
from mlxtend.data import three_blobs_dataX, y = three_blobs_data()
X[:3]

Out[12]:

array([[2.60509732, 1.22529553],[0.5323772 , 3.31338909],[0.802314  , 4.38196181]])

In [13]:

y

Out[13]:

array([1, 2, 2, 2, 1, 2, 2, 1, 0, 2, 1, 0, 0, 2, 2, 0, 0, 1, 0, 1, 2, 1,2, 2, 0, 1, 1, 2, 0, 1, 0, 0, 0, 0, 2, 1, 1, 1, 2, 2, 0, 0, 2, 1,1, 1, 0, 2, 0, 2, 1, 2, 2, 1, 1, 0, 2, 1, 0, 2, 0, 0, 0, 0, 2, 0,2, 1, 2, 2, 2, 1, 1, 2, 1, 2, 2, 0, 0, 2, 1, 1, 2, 2, 1, 1, 1, 0,0, 1, 1, 2, 1, 2, 1, 2, 0, 0, 1, 1, 1, 1, 0, 1, 1, 2, 0, 2, 2, 2,0, 2, 1, 0, 2, 0, 2, 2, 0, 0, 2, 1, 2, 2, 1, 1, 0, 1, 0, 0, 0, 0,1, 0, 0, 0, 2, 0, 1, 0, 2, 2, 1, 1, 0, 0, 0, 0, 1, 1])

5.2 数据可视化

In [14]:

plt.scatter(X[:, 0], X[:, 1], c='black')
plt.show()

5.3 计算聚类质心

In [15]:

from mlxtend.cluster import Kmeanskm = Kmeans(k=3, # 聚类数max_iter=50,  # 最大迭代次数random_seed=1,  # 随机种子print_progress=3  # 每隔3次打印进度)km.fit(X)
Iteration: 2/50 | Elapsed: 00:00:00 | ETA: 00:00:00

Out[15]:

<mlxtend.cluster.kmeans.Kmeans at 0x281b745ff10>

In [16]:

km.iterations_  # 打印聚类的迭代次数

Out[16]:

2

In [17]:

km.centroids_  # 打印聚类的中心

Out[17]:

array([[-1.5947298 ,  2.92236966],[ 2.06521743,  0.96137409],[ 0.9329651 ,  4.35420713]])

5.4 聚类可视化

In [18]:

# 聚类结果
y_clust = km.predict(X)  # 簇群1
plt.scatter(X[y_clust == 0, 0],X[y_clust == 0, 1],s=50,c="lightgreen",marker="s",label="cluster1")
# 簇群2
plt.scatter(X[y_clust == 1, 0],X[y_clust == 1, 1],s=50,c="orange",marker="o",label="cluster2")
# 簇群3
plt.scatter(X[y_clust == 2, 0],X[y_clust == 2, 1],s=50,c="lightblue",marker="v",label="cluster3")# 绘制聚类质心
plt.scatter(km.centroids_[:,0],km.centroids_[:,1],s=250,marker='*',c='red',label='centroids')plt.legend(loc='lower left', scatterpoints=1)plt.grid()
plt.show()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/21764.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

LeetCode216组合总和3

题目描述 找出所有相加之和为 n 的 k 个数的组合&#xff0c;且满足下列条件&#xff1a;只使用数字1到9。每个数字 最多使用一次。返回 所有可能的有效组合的列表 。该列表不能包含相同的组合两次&#xff0c;组合可以以任何顺序返回。 解析 递归加剪枝&#xff0c;搜索长度达…

基于JSP的美食推荐管理系统

你好呀&#xff0c;我是学长猫哥&#xff01;如果有需求可以文末加我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;JSPJavaBeansServlet 系统展示 首页 用户注册 用户登录 热门美食 摘要 本文介绍了一个基于JSP技术的美食推荐管理系统&#xff0…

企业内业务系统与Activiti流程引擎的结合(十一)

摘要:前文分享了企业内部系统集成Activiti的架构和API设计,这里再介绍下 bpmn 流程图的绘制以及与 流程图与bpm后台服务代码的结合点。 一、画流程图 以使用 eclipse 画流程图为例 1. 将 Activiti BPMN 插件安装到 eclipse 插件安装成本后的效果:新建向导中出现 Activiti…

ARM公司发展历程

Arm从1990年成立前开始&#xff0c;历经漫长岁月树立各项公司里程碑及产品成就&#xff0c;一步步成为全球最普及的运算平台。 添加图片注释&#xff0c;不超过 140 字&#xff08;可选&#xff09; Acorn 时期 1978年&#xff0c;Chris Curry和Hermann Hauser共同创立了Acorn…

electron初学

最近有一个开发桌面端的业务&#xff0c;考虑到跨平台就使用了electron。 引用官网&#xff1a;Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows…

OpenAI 近期动荡:解雇 Sam Altman 事件分析与 AI 未来展望

引言 OpenAI 的动荡从未停止。最近&#xff0c;由于 OpenAI 高层领导的更迭&#xff0c;引发了广泛的关注和讨论。特别是在 Sam Altman 被解雇后&#xff0c;再次回归 CEO 职位的过程&#xff0c;更是引起了公众和业内的巨大反响。前 OpenAI 董事会成员 Helen Toner 在最新一期…

如何利用AI大模型给我写程序

文章目录 1&#xff0c;应用情景&#xff08;给文件夹里的图片批量重命名&#xff09;2&#xff0c;选择合适的AI大模型3&#xff0c;复制AI给出来的代码&#xff0c;在本地执行4&#xff0c;结果检查 1&#xff0c;应用情景&#xff08;给文件夹里的图片批量重命名&#xff09…

JasperReport-动态数据源数据填充

一、数据填充 在正式环境中,报表中的内容或数据通常是通过查询底层数据源获取然后再进行数据填充。JasperReport的JAVA SDK中,提供了多种方法提供数据填充(如下其中一个示例): /** * 填充数据构造JasperPrint * is: 文件输入流 * parameters:参数 * connection:数据源…

基于java的CRM客户关系管理系统(六)

目录 5.3 表现层设计 5.3.1 模型层&#xff08;M&#xff09; 5.3.2 视图层&#xff08;V&#xff09; 5.3.3 控制层&#xff08;C&#xff09; 5.4 系统主要功能模块的实现 5.4.1 登录功能的实现 5.4.2 客户管理的实现 5.5 本章小结 参考文献 前面内容请移步 基于java…

k8s学习--Secret详细解释与应用

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 Secret什么是Secret?Secret四种类型及其特点Secret应用案例&#xff08;1&#xff09;将明文密码进行base64编码&#xff08;2&#xff09;编写创建secret的YAML文…

笔试训练2

牛客.单词搜索 刚开始我就想是搜索&#xff0c;但是不清楚bfs还是dfs更好&#xff0c;我尝试了bfs但是队列存东西&#xff0c;没有我想象的那么好写&#xff0c;所以我决定试试dfs import java.util.*;public class Solution {static int m 0;static int n 0;static int […

【人工智能Ⅱ】实验8:生成对抗网络

实验8&#xff1a;生成对抗网络 一&#xff1a;实验目的 1&#xff1a;理解生成对抗网络的基本原理。 2&#xff1a;学会构建改进的生成对抗网络&#xff0c;如DCGAN、WGAN、WGAN-GP等。 3&#xff1a;学习在更为真实的数据集上应用生成对抗网络的方法。 二&#xff1a;实验…

SaaS销售新指标|一文带你读懂什么是反向拒付指标

saas企业销售也需要一系列的指标来衡量企业运营情况如何&#xff1f;有哪些值得改善的地方&#xff1f;今天林叔发现一个比较有意思的新指标&#xff1a;反向拒付。希望能帮助saas企业更好的运营。 一、什么是反向拒付&#xff1f; **反向拒付指标&#xff08;反拒付指标&…

C基础-标准库下

上:http://t.csdnimg.cn/qj5uA 目录 七. math.h 八. setjmp.h 九. signal.h 十. stdarg.h 十一.stddef.h 十二. stdio.h 十三. stdlib. 十四. string.h 十五. time.h 七. math.h 定义了各种数学函数和一个宏。 宏和函数描述 序号宏 & 描述1HUGE_VAL 当函数的结…

Vue3——实现word,pdf上传之后,预览功能(实测有效)

vue-office/pdf - npm支持多种文件(**docx、excel、pdf**)预览的vue组件库&#xff0c;支持vue2/3。也支持非Vue框架的预览。. Latest version: 2.0.2, last published: a month ago. Start using vue-office/pdf in your project by running npm i vue-office/pdf. There are …

Mybatis实现树形结构方式

1&#xff0c;三级分类树形结构查询 /*** DDD(Domain-Driven Design): 领域驱动设计** 三级分类树形结构&#xff1b;* 支持无限层级&#xff1b;* 当前项目只有三级*/ Data public class CategoryTreeTo {private Long categoryId; //1private String categoryName;private …

ENVI 5.3/6.0打开Landsat 8/9 C2L2级别数据(带有Metadata),附常见问题

ENVI 5.3/6.0打开Landsat 8/9 C2L2级别数据&#xff08;带有Metadata&#xff09; 文章目录 ENVI 5.3/6.0打开Landsat 8/9 C2L2级别数据&#xff08;带有Metadata&#xff09;前言数据下载ENVI 5.3打开Landsat 8 C2L2级别数据ENVI 5.3打开Landsat 9 C2L2级别数据ENVI 6.0打开La…

手写防抖debounce

手写防抖debounce 应用场景 当需要在事件频繁触发时&#xff0c;只执行最后一次操作&#xff0c;可以使用防抖函数来控制函数的执行频率,比如窗口resize事件和输入框input事件&#xff1b; 这段代码定义了一个名为 debounce 的函数&#xff0c;它接收两个参数&#xff1a;fn…

颠覆传统:探索Web3对传统计算机模式的冲击

随着Web3技术的崛起&#xff0c;传统计算机模式正面临着前所未有的冲击与挑战。Web3作为下一代互联网的代表&#xff0c;以其去中心化、安全可信的特性&#xff0c;正在颠覆着传统计算机模式的种种假设和局限性。本文将深入探讨Web3对传统计算机模式的冲击&#xff0c;并探索其…

关于stm32的复用和重映射问题

目录 需求IO口的复用和重映射使用复用复用加重映射 总结参考资料 需求 一开始使用stm32c8t6&#xff0c;想实现pwm输出&#xff0c;但是原电路固定在芯片的引脚PB10和PB11上&#xff0c;查看了下引脚的功能&#xff0c;需要使用到复用功能。让改引脚作为定时器PWM的输出IO口。…