强大的机器学习建模扩展包: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 itertools

from 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 None

lin_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 LinearRegression

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(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 None

lin_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 LinearRegression

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])

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')    
    return

lin_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_data

X, 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 Kmeans

km = 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.mfbz.cn/a/675336.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

程序员应该有什么职业素养?

程序员的六大职业素养&#xff1a;构建成功职业生涯的基石 在不断变化的技术世界中&#xff0c;程序员不单要保持技术的锋利&#xff0c;也需要培养相应的职业素养&#xff0c;这些素养在很大程度上决定了一个程序员的职业生涯能否走得长远。以下是我认为最为重要的六大职业素…

2024上海国际金属去毛刺表面精加工技术展览会

2024上海国际金属去毛刺表面精加工技术展览会 2024 Shanghai International Metal Deburring Surface Finishing Technology Exhibition 时间&#xff1a;2024年12月18日--20日 地点&#xff1a;上海新国际博览中心 详询主办方陆先生 I38&#xff08;前三位&#xff09; …

gorm/gin框架实战

gorm/gin框架实战 项目简介 学习源视频&#xff1a;【最新Go Web开发教程】基于gin框架和gorm的web开发实战 (七米出品)_哔哩哔哩_bilibili 本博客为我的学习笔记。 项目目标&#xff1a;实现一个备忘录工具(当然不支持alert)&#xff0c;仅仅是可以记录待办事项。 实现了…

Linux基础1-基本指令3

上篇文章我们说到了文件&#xff0c;pwd&#xff0c;touch&#xff0c;mkdir等知识。 Linux基础1-基本指令2&#xff08;你真的了解文件吗?&#xff09;-CSDN博客 本文继续梳理其他基础命令 1.本章重点 1.删除一个空目录命令rmdir 2.删除一个文件指令rm(重要!) 3.man命令&am…

Gradle下载慢的问题解决

把gradle地址前面的部分改一下就行&#xff0c;下载就快多了 改成这个地址&#xff1a; https://mirrors.aliyun.com/macports/distfiles/gradle/ 这个是gradle的阿里云镜像下载地址&#xff0c;在国内下载起来很快 如何改地址&#xff1a; 找到路径 项目/app/gradle/wrappe…

养老产业能否成为国家经济的新支柱?

养老产业&#xff0c;随着人口老龄化的加剧&#xff0c;逐渐成为国家经济的新支柱。在中国&#xff0c;老年人口的快速增长已经引起了社会的广泛关注&#xff0c;这也带动了对养老服务和健康医疗需求的持续增加。 政府也在积极应对这一挑战&#xff0c;出台了一系列政策来支持…

理解与应用排序算法(快速排序C实现)

目录 一、排序的定义 二、内排序方法 三、插入排序 3.1 直接插入排序 3.1 折半插入排序 3.1 链表插入排序 四、交换排序 五、起泡排序 六、快速排序 一、排序的定义 稳定排序和非稳定排序 设文件f(R1......Ri......Rj......Rn)中记录Ri、Rj&#xff08;i≠j&#xff0…

TMS320F280049 ECAP模块--应用(2)

例1-上升沿触发 如下图所示&#xff0c;evt1-4设置为上升沿触发&#xff0c;在每个上升沿ctr值依次加载到cap1-4. 例2-上升下降沿触发 每个边沿都可选为事件&#xff0c;每次事件到来&#xff0c;依次把ctr加载到cap1-4。 例3-差异模式下上升沿触发 差异模式下每次事件到来时…

varchar 字段扩展问题

背景 近期接到一个产品需求&#xff0c;由于上游业务字段扩大了字段&#xff0c;下游的字段也得跟着调整扩大&#xff0c;这就涉及几十张大表&#xff0c;十几亿行数据的变更。 如果按照传统方式 onlie-ddl 借用第三方工具也得三四天分批跑&#xff0c;看了看MySQL官网&#…

ctfshow-web入门-爆破(web25)及php_mt_seed工具的安装与使用

爆个&#x1f528;&#xff0c;不爆了 hexdec() 函数用于将十六进制字符串转换为十进制数&#xff1b; 注意&#xff1a; 我最开始做这道题时看错了&#xff0c;误以为随机数的种子直接来自于 flag 的前八位&#xff0c;以为就是 ctfshow{ 这八个字符然后 md5 加密再截取&a…

使用jquery.mousewheel-3.0.6.pack.js时报错

基于1.12.4版本的jquery.min.js&#xff0c;在使用jquery.mousewheel-3.0.6.pack.js时报错了&#xff1a; 可以如下解决&#xff1a; addEventListener事件里要加上{ passive: false }&#xff0c;这样就可以在使用鼠标滚轮放大缩小图片时&#xff0c;就不会报上述的错误了。 …

VsQt单元测试目录的管理方式

正常项目的文件管理方式 正常项目的目录&#xff0c;是由文件系统中实际的文件夹进行分类管理的。 但是如果单元测试用实际文件夹管理的话&#xff0c;会出现问题&#xff0c;就是被测类太多了&#xff0c;用文件系统管理的话&#xff0c;不太方面查看&#xff0c;如下图所示。…

7EPhone云手机各功能详解

上篇文章详细介绍了7EPhone云手机的注册和购买&#xff08;没看到的同学可以自主去翻看一下哈~&#xff09;&#xff0c;这篇文章主要给大家讲解7EPhone作为专业海外社媒营销工具&#xff0c;界面上显示什么信息&#xff0c;云机到底有什么功能&#xff0c;这些功能具体怎么来使…

招聘兼职发布客服的骗局大揭秘

在现今的互联网社会中&#xff0c;线上兼职成为许多人追求额外收入或灵活就业的方式。然而&#xff0c;这其中也隐藏着不少骗局&#xff0c;在各大招聘网站或者招聘软件上的今日头条兼职客服招聘就是其中之一。本文将详细揭露这种骗局的运作方式&#xff0c;以帮助大家识别和防…

对比WPF和Avalonia的边框渲染差异

众所周知&#xff0c;诸如Border、Rectangle等元素&#xff0c;是具有边框的。但在WPF和Avalonia中&#xff0c;边框的渲染机制有所不同。 如下代码&#xff0c;Border的边框和背景色均为黑色&#xff0c;并且将透明度设为0.5&#xff1a; <Border Width"100" H…

知了汇智携手数字经济商会,共促物联网鸿蒙产教融合新篇章

5月31日&#xff0c;由成都市数字经济商会主办&#xff0c;华为技术有限公司协办&#xff0c;成都知了汇智科技有限公司及成都市数字经济商会人才专委会共同承办的“产教融合物联网鸿蒙人才交流”大会在成都天府软件园产教融合基地隆重举办。 会议旨在加速四川省鸿蒙技术产业的…

Transformer详解(3-1)-attention为什么要除以根号d

attention的计算公式&#xff0c;为什么要除以根号d? 参考 NLP面试官&#xff1a;“Attention为什么要除以根号d” 算法女生这么回答当场想发 offer

【轻触按键】终篇 -- 纯硬 VS 复合

1、选型 2、开关机电路–填坑1 3、开关机电路–填坑1.a 4、开关机电路–复合芯片解决方案 填坑2 总结 上述几篇&#xff0c;基本上都是比较靠谱的硬件方案&#xff1b; ①所有开关均关闭&#xff1b; X1灯亮&#xff1b;P-MOS 管Q1关断&#xff1b; 特别注意&#xff0c;…

每日两题 / 34. 在排序数组中查找元素的第一个和最后一个位置 33. 搜索旋转排序数组(LeetCode热题100)

34. 在排序数组中查找元素的第一个和最后一个位置 - 力扣&#xff08;LeetCode&#xff09; 根据二分函数&#xff0c;得到>target和<target的两个&#xff0c;分别是答案的l和r class Solution { public:vector<int> searchRange(vector<int>& nums,…

简单聊下服务器防病毒

在当今数字化时代&#xff0c;服务器作为数据存储、处理与传输的核心设备&#xff0c;其安全性显得尤为关键。服务器防病毒工作&#xff0c;不仅是保障企业信息安全的重要一环&#xff0c;更是维护用户数据隐私的关键举措。以下&#xff0c;我们将从多个方面&#xff0c;简单探…