【机器学习】mlxtend库

257 阅读17分钟

参考网址

原文链接:https://blog.csdn.net/wzk4869/article/details/131377230
https://blog.csdn.net/m0_67847535/article/details/136110097

一、mlxtend库的介绍

Mlxtend是一个Python库,用于机器学习和数据科学任务中的扩展功能。
它提供了一系列方便实用的工具和函数,可用于特征选择、模型评估、数据可视化等任务。
以下是Mlxtend库的一些主要功能和特点:

特征选择:Mlxtend提供了多种特征选择的方法,包括基于特征重要性的方法、递归特征消除以及基于特征子集搜索的方法。
模型评估:该库提供了交叉验证、网格搜索以及模型性能评估的功能。可以使用交叉验证来评估模型的泛化能力,并使用网格搜索来寻找最佳的超参数组合。
集成学习:Mlxtend支持集成学习方法,如投票分类器、堆叠分类器和Adaboost等。这些方法可以提高模型的准确性和稳定性。
关联规则挖掘:Mlxtend包含了Apriori算法,用于发现数据集中的频繁项集和关联规则。这对于市场篮子分析和推荐系统等任务非常有用。
数据可视化:Mlxtend提供了多种绘图工具,可用于数据集的可视化和结果的呈现。它支持绘制分类边界、特征重要性图和学习曲线等。

Mlxtend是一个功能强大且易于使用的机器学习扩展库,为数据科学家和机器学习实践者提供了丰富的工具和函数,以加速开发和改进机器学习模型的过程。

Python的MLxtend库是一个强大的工具,提供了丰富的功能,可以帮助机器学习从业者更轻松地开发、评估和部署模型。
无论是在特征选择、模型评估还是集成学习方面需要帮助,MLxtend 都提供了相应的工具和方法。

# 如何安装
pip install mlxtend
# or
pip install mlxtend --upgrade --no-deps
# or,国内的清华的镜像源
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple mlxtend

二、Mlxtend API介绍

 mlxtend库提供了很多的api, 
 这些api涵盖了很多的方向,比如分类,回归,聚类,数据集,特征处理,关联规则等
 

2.1 mlxtend.classifier(分类)

rasbt.github.io/mlxtend/api…

  • Adaline(自适应线性神经元分类器):Adaline是一种自适应线性神经元分类器,它可以用于二元分类任务。它具有参数eta(学习速率)、epochs(迭代次数)、minibatches(小批量样本数)、random_seed(随机种子)等。

  • EnsembleVoteClassifier(集成投票分类器):EnsembleVoteClassifier是一个用于scikit-learn估计器的软投票/多数表决分类器。它可以使用多个分类器,并根据不同的投票策略进行预测。

  • LogisticRegression(逻辑回归分类器):LogisticRegression是一个逻辑回归分类器,用于处理二元分类问题。它具有参数eta(学习速率)、epochs(迭代次数)、l2_lambda(L2正则化参数)、minibatches(小批量样本数)、random_seed(随机种子)等。

  • MultiLayerPerceptron(多层感知机分类器):MultiLayerPerceptron是一个多层感知机分类器,使用逻辑sigmoid激活函数。它具有参数eta(学习速率)、epochs(迭代次数)、hidden_layers(隐藏层大小列表)、momentum(动量参数)、l1(L1正则化参数)、l2(L2正则化参数)等。

  • OneRClassifier(OneR分类器):OneRClassifier是一个使用One Rule算法的分类器。One Rule算法是一种简单但有效的规则学习算法,用于生成基于单个特征的决策规则。

  • Perceptron(感知器分类器):Perceptron是一个感知器分类器,用于处理二元分类任务。它具有参数eta(学习速率)、epochs(迭代次数)、random_seed(随机种子)等。

  • SoftmaxRegression(Softmax回归分类器):SoftmaxRegression是一个Softmax回归分类器,用于多类别分类。它具有参数eta(学习速率)、epochs(迭代次数)、l2(L2正则化参数)、minibatches(小批量样本数)等。

  • StackingCVClassifier(交叉验证堆叠分类器):StackingCVClassifier是一个用于scikit-learn估计器的交叉验证堆叠分类器。它将多个分类器作为基本分类器,并使用元分类器对其预测结果进行堆叠。

  • StackingClassifier(堆叠分类器):StackingClassifier是一个用于分类任务的堆叠分类器。它使用多个分类器作为基本分类器,并使用元分类器对其预测结果进行堆叠。

from mlxtend.classifier import EnsembleVoteClassifier # 集成投票分类器

from sklearn.datasets import load_iris  # 数据集

from sklearn.model_selection import train_test_split # 划分训练集和测试集

from sklearn.linear_model import LogisticRegression  # 逻辑回归
from sklearn.naive_bayes import GaussianNB           # 堆叠算法
from sklearn.ensemble import RandomForestClassifier  # 随机森林
from sklearn.svm import SVC                          # 支持向量机
 
# 加载鸢尾花数据集
data = load_iris()
X, y = data.data, data.target
 
# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
 
# 创建多个基本分类器(弱学习器,weak learner)
lr = LogisticRegression()     # 逻辑回归
nb = GaussianNB()             # 堆叠
rf = RandomForestClassifier() # 随机森林
svm = SVC()                   # 支持向量机
 
# 创建集成分类器
# 这里clfs中有多个分类模型
eclf = EnsembleVoteClassifier(clfs=[lr, nb, rf, svm],
                              voting='hard')
 
# 训练集成分类器
eclf.fit(X_train, y_train)
 
# 评估集成分类器性能
accuracy = eclf.score(X_test, y_test)
print("集成分类器准确率:", accuracy)

2.2 mlxtend.cluster(聚类)

rasbt.github.io/mlxtend/api…

mlxtend中的Kmeans类实现了K-means聚类算法,具有以下参数:
    k:指定要形成的簇的数量。
    max_iter:最大迭代次数,控制算法的收敛性。
    convergence_tolerance:收敛容差,当质心的变化小于此阈值时,算法停止迭代。
    random_seed:随机种子,用于控制随机初始化的一致性。
    print_progress:打印算法进度的选项。

2.3 mlxtend.data(数据集)

rasbt.github.io/mlxtend/api…

  • autompg_data:Auto MPG数据集。
  • boston_housing_data:波士顿房价数据集。
  • iris_data:鸢尾花数据集。
  • loadlocal_mnist:从ubyte文件中读取MNIST数据集。
  • make_multiplexer_dataset:创建一个二进制n位多路复用器数据集。
  • mnist_data:来自MNIST手写数字数据集的5000个样本。
  • three_blobs_data:用于聚类的三个二维斑点数据集。
  • wine_data:葡萄酒数据集。

2.4 mlxtend.evaluate(评估方法)

rasbt.github.io/mlxtend/api…

  • BootstrapOutOfBag:用于基于自助法进行模型评估的方法。
  • GroupTimeSeriesSplit:用于处理分组时间序列数据的交叉验证方法。
  • PredefinedHoldoutSplit:用于指定训练/验证集划分的方法,可与sklearn的GridSearchCV等函数配合使用。
  • RandomHoldoutSplit:用于随机划分训练/验证集的方法,可与sklearn的GridSearchCV等函数配合使用。
  • accuracy_score:计算准确率的方法。
  • bias_variance_decomp:计算偏差-方差分解的方法。
  • bootstrap:实现普通非参数自助法的方法。
  • cochrans_q:用于比较2个或多个模型的Cochran’s Q检验方法。
  • combined_ftest_5x2cv:用于比较两个模型性能的5x2cv组合F检验方法。
  • confusion_matrix:计算混淆矩阵/列联表的方法。
  • create_counterfactual:实现反事实方法的方法。
  • feature_importance_permutation:通过置换重要性计算特征重要性的方法。
  • ftest:用于比较2个或多个模型的F-Test检验方法。
  • lift_score:计算提升度的方法。
  • mcnemar:用于配对名义数据的McNemar检验方法。
  • mcnemar_table:计算McNemar检验的2x2列联表的方法。
  • mcnemar_tables:计算McNemar检验或Cochran’s Q检验的多个2x2列联表的方法。
  • paired_ttest_5x2cv:用于比较两个模型性能的5x2cv配对t检验方法。
  • paired_ttest_kfold_cv:用于比较两个模型性能的k-fold配对t检验方法。
  • paired_ttest_resampled:用于比较两个模型性能的重采样配对t检验方法。
  • permutation_test:非参数置换检验的方法。
  • proportion_difference:计算比例差异检验的方法。
  • scoring:计算监督学习中的评分指标的方法。

2.5 mlxtend.feature_extraction(特征提取)

rasbt.github.io/mlxtend/api…

LinearDiscriminantAnalysis:线性判别分析(Linear Discriminant Analysis,LDA)类。
PrincipalComponentAnalysis:主成分分析(Principal Component Analysis,PCA)类。
RBFKernelPCA:径向基核主成分分析(RBF Kernel Principal Component Analysis)类,用于降低数据维度。

2.6 mlxtend.feature_selection(特征选择)

rasbt.github.io/mlxtend/api…

ColumnSelector:用于从数据集中选择特定列的对象。可以根据指定的列索引或列名来选择需要的列数据。
ExhaustiveFeatureSelector:用于进行穷举特征选择的方法。该方法通过遍历所有可能的特征组合来选择最佳的特征子集,以提高模型性能。
SequentialFeatureSelector:用于进行顺序特征选择的方法。该方法通过迭代地添加或删除特征来选择最佳的特征子集,以提高模型性能。可以使用前向选择(forward)、后向选择(backward)或浮动选择(floating)策略。
from mlxtend.feature_selection import SequentialFeatureSelector
from sklearn.datasets import load_iris
from sklearn.linear_model import LogisticRegression
 
# 加载鸢尾花数据集
data = load_iris()
X, y = data.data, data.target
 
# 创建逻辑回归模型
lr = LogisticRegression()
 
# 创建顺序特征选择器
sfs = SequentialFeatureSelector(lr, k_features=2, forward=True, scoring='accuracy', cv=5)
 
# 执行特征选择
sfs.fit(X, y)
 
# 最优特征子集
print("最优特征子集:", sfs.k_feature_idx_)

2.7 mlxtend.file_io

rasbt.github.io/mlxtend/api…

find_filegroups:用于从不同目录中查找和收集文件的方法。可以根据指定的路径、文件名子字符串、文件扩展名等条件,在不同目录中查找符合条件的文件,并将它们收集到一个Python字典中。
find_files:用于在指定目录中根据文件名子字符串进行文件查找的方法。可以根据指定的子字符串匹配条件,在指定的目录中查找符合条件的文件,并返回匹配的文件列表。

2.8 mlxtend.frequent_patterns(频繁项集)

rasbt.github.io/mlxtend/api…

apriori:从一个独热编码的DataFrame中获取频繁项集。该方法基于Apriori算法,根据最小支持度筛选出频繁项集,可以用于发现数据中频繁出现的组合。
association_rules:生成关联规则的DataFrame,包括指标如’支持度’、'置信度’和’提升度’等。可以根据指定的关联规则评价指标和最小阈值筛选出具有一定关联性的规则。
fpgrowth:从一个独热编码的DataFrame中获取频繁项集。该方法基于FP-Growth算法,使用FP树数据结构高效地挖掘频繁项集,适用于大规模数据集。
fpmax:从一个独热编码的DataFrame中获取极大频繁项集。与频繁项集不同,极大频繁项集是指不再有超集是频繁项集的项集,具有更高的抽象度和概括性。
hmine:从一个独热编码的DataFrame中获取频繁项集。该方法基于Hash算法,以哈希表为基础实现高效的频繁项集挖掘。

2.9 mlxtend.image(图像)

rasbt.github.io/mlxtend/api…

EyepadAlign:人脸图像对齐/变换类,基于眼睛对齐的方法。该类可用于将人脸图像对齐到面部特征点,以实现标准化的人脸对齐操作。
extract_face_landmarks:用于提取人脸特征点的函数。该函数接受一个图像作为输入,并返回检测到的人脸特征点的位置。通过提取人脸特征点,可以进一步应用于人脸分析、表情识别、人脸识别等任务。

2.10 mlxtend.plotting(绘图,可视化)

rasbt.github.io/mlxtend/api…

category_scatter:绘制散点图,可以使用不同的颜色和标记样式表示不同的类别。
checkerboard_plot:通过matplotlib绘制棋盘图表/热图。
ecdf:绘制经验累积分布函数(ECDF)图。
enrichment_plot:绘制堆叠条形图。
heatmap:通过matplotlib绘制热图。
plot_confusion_matrix:绘制混淆矩阵图。
plot_decision_regions:绘制分类器的决策边界。
plot_learning_curves:绘制分类器的学习曲线。
plot_linear_regression:绘制线性回归拟合线。
plot_pca_correlation_graph:计算主成分分析(PCA)并绘制相关性图。
plot_sequential_feature_selection:绘制特征选择结果图。
remove_borders:从matplotlib图中去除边框。
scatter_hist:绘制散点图,并沿轴绘制各个特征的直方图。
scatterplotmatrix:绘制散点图矩阵。
stacked_barplot:绘制堆叠条形图。

2.11 mlxtend.regressor(回归)

rasbt.github.io/mlxtend/api…

LinearRegression:最小二乘线性回归模型。它使用普通最小二乘法来拟合线性模型。
StackingCVRegressor:用于回归问题的堆叠交叉验证回归器。它基于scikit-learn估计器实现了堆叠回归模型,可以通过交叉验证进行性能评估和模型选择。
StackingRegressor:用于回归问题的堆叠回归器。它基于scikit-learn估计器实现了堆叠回归模型,可以通过将多个基本回归模型的预测结果作为输入,使用元回归模型进行集成。

2.12 mlxtend.preprocessing(数据预处理)

rasbt.github.io/mlxtend/api…

CopyTransformer:返回输入数组的副本的转换器。
DenseTransformer:将稀疏数组转换为密集数组的转换器。
MeanCenterer:对向量和矩阵进行列中心化的转换器。
TransactionEncoder:用于Python列表中事务数据的编码器类。
minmax_scaling:对pandas DataFrame进行最小-最大缩放。
one_hot:对类别标签进行独热编码。
shuffle_arrays_unison:同时打乱NumPy数组的转换器。
standardize:对pandas DataFrame中的列进行标准化。

2.13 mlxtend.text

rasbt.github.io/mlxtend/api…

generalize_names:将人的姓和名进行泛化处理,返回格式为<><分隔符><名字的第一个或几个字母>的姓名字符串。
generalize_names_duplcheck:对DataFrame中的姓名列进行泛化处理并去除重复值。默认情况下,使用mlxtend.text.generalize_names方法对姓和名进行泛化处理,并根据是否存在重复值选择使用更多的名字字母进行泛化。
tokenizer_emoticons:从文本中提取出表情符号(emoticons)。
tokenizer_words_and_emoticons:将文本转换为小写的单词和表情符号(emoticons)。

2.14 mlxtend.utils(其他一些工具)

rasbt.github.io/mlxtend/api…

Counter:用于显示for循环迭代器的进度。可以在循环中使用该类来跟踪迭代器的进度,并显示进度条。
assert_raises:用于检查特定异常是否被引发,并验证异常消息是否与预期相符。可以使用该方法来进行单元测试,确保特定代码段引发了预期的异常。
format_kwarg_dictionaries:用于合并默认的关键字参数字典和用户指定的关键字参数字典。该方法可以帮助在函数或方法中处理和组合不同来源的关键字参数,例如默认参数和用户提供的参数。

三、Mlxtend库和Sklearn库的联系和区别

1/联系

  1. 兼容性和集成性

    • Mlxtend 是为 Sklearn 提供额外实用工具和扩展功能的Python库。它旨在与Sklearn无缝工作,为数据科学家和机器学习工程师提供一个更加强大和灵活的工具集。这意味着Mlxtend中的许多算法和工具可以直接与Sklearn中的模型和数据集结合使用,无需进行复杂的转换或适配。
  2. 功能互补

    • Sklearn提供了广泛的机器学习算法和数据处理工具,但可能在一些高级或特定领域的功能上有所不足。Mlxtend则通过提供额外的特征选择、集成学习方法、模型评估工具等,对Sklearn进行了有效的补充。这使得用户可以在使用Sklearn的基础上,进一步利用Mlxtend的功能来优化和提升机器学习模型的性能。
  3. 设计理念

    • 两个库都遵循了Python的简洁性和易用性原则,提供了易于理解和使用的API。这使得用户可以在不牺牲性能的前提下,快速构建和测试机器学习模型。

2/区别

  1. 功能范围

    • Sklearn 是一个全面的机器学习库,提供了从数据预处理、特征提取、模型训练到评估的完整流程。它涵盖了分类、回归、聚类、降维等多种机器学习任务,并提供了丰富的算法实现。
    • Mlxtend 则更侧重于为Sklearn提供额外的实用工具和扩展功能。它虽然也包含了一些基本的机器学习算法,但更多地是关注于特征选择、集成学习、模型评估等高级功能。
  2. 算法和工具

    • Sklearn提供了大量的机器学习算法实现,如逻辑回归、决策树、随机森林、支持向量机等。同时,它也提供了丰富的数据处理和特征提取工具。
    • Mlxtend则提供了一些在Sklearn中可能未直接提供的算法和工具,如基于顺序前进选择的特征选择算法、Stacking和Blending等集成学习方法、Bootstrap和Permutation Test等模型评估工具等。
  3. 应用场景

    • Sklearn适用于广泛的机器学习应用场景,无论是初学者还是经验丰富的研究人员都可以利用它快速构建和测试各种机器学习模型。
    • Mlxtend则更适用于那些需要实现更高级或特定领域机器学习技术的场景。例如,当用户需要构建复杂的集成学习模型或进行深入的模型评估时,Mlxtend提供了更多的选择和灵活性。

3/综上所述

Mlxtend库和Sklearn库在功能范围、算法和工具以及应用场景等方面存在一定的联系和区别。用户可以根据自己的具体需求选择合适的库来使用,或者将两个库结合使用以发挥它们的最大优势。

四、实际应用场景

1. 金融风险评估

在金融领域,MLxtend 可以用于优化信用风险评估模型。
金融机构通常使用多个模型来评估借款人的信用风险。
MLxtend库的集成学习功能可以将多个模型组合在一起,以提高整体的风险评估性能。
from mlxtend.classifier import EnsembleVoteClassifier

from sklearn.datasets import load_credit_data
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.ensemble import RandomForestClassifier

# 加载信用评分数据集
data = load_credit_data()
X, y = data.data, data.target

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建多个基本分类器
lr = LogisticRegression()
dt = DecisionTreeClassifier()
rf = RandomForestClassifier()

# 创建集成分类器
eclf = EnsembleVoteClassifier(clfs=[lr, dt, rf], voting='soft')

# 训练集成分类器
eclf.fit(X_train, y_train)

# 评估集成分类器性能
accuracy = eclf.score(X_test, y_test)
print("集成分类器准确率:", accuracy)
 这个示例演示了如何使用MLxtend的EnsembleVoteClassifier创建一个集成分类器,并评估其在信用评分任务中的性能。
 

2. 医疗图像分类

在医疗领域,MLxtend 可以用于图像分类任务。
医疗图像通常需要高度准确的分类,而 MLxtend 提供了多个强大的分类器,可以用于构建高性能的图像分类模型。
from mlxtend.classifier import EnsembleVoteClassifier

from sklearn.datasets import load_medical_images
from sklearn.model_selection import train_test_split

from sklearn.ensemble import RandomForestClassifier
from sklearn.svm import SVC
from sklearn.neural_network import MLPClassifier

# 加载医疗图像数据集
data = load_medical_images()
X, y = data.images, data.labels

# 将图像数据展平
X = X.reshape(X.shape[0], -1)

# 划分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建多个基本分类器
rf = RandomForestClassifier()
svm = SVC()
mlp = MLPClassifier()

# 创建集成分类器
eclf = EnsembleVoteClassifier(clfs=[rf, svm, mlp], voting='soft')

# 训练集成分类器
eclf.fit(X_train, y_train)

# 评估集成分类器性能
accuracy = eclf.score(X_test, y_test)
print("集成分类器准确率:", accuracy)
这个示例演示了如何使用 MLxtend 的 EnsembleVoteClassifier 创建一个集成分类器,用于医疗图像分类任务。

3. 零售销售预测

在零售领域,销售预测对库存管理和采购决策至关重要。
MLxtend 的时间序列预测工具可以用于构建准确的销售预测模型,帮助零售商更好地规划库存和采购策略。
from mlxtend.forecaster import AutoARIMA
from sklearn.datasets import load_sales_data
import matplotlib.pyplot as plt

# 加载销售数据集
data = load_sales_data()
dates, sales = data.dates, data.sales

# 创建 AutoARIMA 模型
model = AutoARIMA(sp=12, suppress_warnings=True)

# 拟合模型
model.fit(dates, sales)

# 预测未来销售额
forecast, conf_int = model.predict(steps=12, return_conf_int=True)

# 可视化销售预测
plt.figure(figsize=(12, 6))
plt.plot(dates, sales, label='实际销售额')
plt.plot(dates[-1:], forecast, label='预测销售额', linestyle='--')
plt.fill_between(dates[-1:], conf_int[:, 0], conf_int[:, 1], alpha=0.2)
plt.legend()
plt.xlabel('日期')
plt.ylabel('销售额')
plt.title('销售预测')
plt.show()
这个示例演示了如何使用 MLxtend 的 AutoARIMA 模型进行销售预测,并将结果可视化。