[机器学习-03] Scikit-Learn机器学习工具包学习指南:主要功能与用法解析_scikit-learn包-CSDN博客

[机器学习-03] Scikit-Learn机器学习工具包学习指南:主要功能与用法解析

🎩 欢迎来到技术探索的奇幻世界👨‍💻

📜 个人主页@一伦明悦-CSDN博客

✍🏻 作者简介: C++软件开发、Python机器学习爱好者

🗣️ 互动与支持:💬评论      👍🏻点赞      📂收藏     👀关注+

如果文章有所帮助,欢迎留下您宝贵的评论,点赞加收藏支持我,点击关注,一起进步!


目录

前言

正文

01-Scikit-Learn简介

 02-Sklearn实现有监督学习

 03-Sklearn实现无监督学习

 04-Sklearn实现模型选择与评估

05-Sklearn实现基于排列的特征重要性

 06-Sklearn实现带有可视化API的ROC曲线

 07-Sklearn实现数据集转换

总结


前言

        Scikit-Learn(也称为sklearn)是一个用于机器学习的Python库,提供了丰富的工具和算法,用于数据预处理、模型选择、评估和部署。Scikit-Learn是一个开源的机器学习库,它支持有监督和无监督的学习。它还提供了用于模型拟合,以及许多其他实用程序的各种工具。

        下面链接为scikit-learn工具包的中文社区,里面包含了该工具包可以实现的各种功能,并给出了实例进行分析使用过程,通过这里的学习可以更快的掌握工具包的使用方法,非常适用于机器学习初始学习者。

scikit-learn中文社区icon-default.png?t=N7T8https://scikit-learn.org.cn/

         附上Scikit-Learn工具包的所有API链接:

        注:由于Scikit-Learn工具包包含机器学习所需要的众多功能,一篇难以做出更加详细的分析,因此,在本篇中仅对Scikit-Learn中可以使用的功能进行简要分析,后续更新每种功能更加详细的使用过程。 

正文

01-Scikit-Learn简介

        Scikit-Learn是一个用于机器学习的Python库,它提供了各种用于数据预处理、模型选择、评估和部署的工具和算法。这个库的设计重点是简单、高效和可扩展性。

      (1)Scikit-Learn的简单易用性使得用户可以轻松地使用各种机器学习算法,无需深入了解算法的底层实现。其一致的API设计使得算法的调用和使用变得简单直观。这种设计思想使得Scikit-Learn成为许多数据科学从业者和研究人员的首选工具之一。

      (2)Scikit-Learn提供了广泛的算法支持,包括回归、分类、聚类、降维等各种机器学习任务的算法。无论您是处理结构化数据还是文本数据,Scikit-Learn都能提供适合的算法和工具。从传统的线性模型到现代的深度学习算法,Scikit-Learn都能涵盖您所需的范围。

      (3)Scikit-Learn还提供了丰富的功能,如特征选择、模型评估、交叉验证、管道等,帮助用户完成整个机器学习流程。这些功能使得用户可以更好地处理数据、选择模型、评估性能,并优化整个机器学习流程。

      (4)Scikit-Learn的性能优化也值得一提。其底层实现经过优化,训练和预测速度较快,能够处理大规模数据集。这使得Scikit-Learn成为处理大数据集和复杂模型的理想选择。

      (5)Scikit-Learn与其他Python科学计算库(如NumPy、SciPy和Matplotlib)以及数据处理库(如Pandas)无缝集成,使得用户可以方便地进行数据处理、可视化和模型评估。这种集成性使得用户可以更加高效地完成整个机器学习流程。

        下面是Scikit-Learn的一些主要特点和功能:

        a、简单易用: Scikit-Learn提供了简单且一致的API,使得用户可以轻松地使用各种机器学习算法,无需深入了解算法的底层实现。

        b、广泛的算法支持: Scikit-Learn包含了许多经典的机器学习算法,包括回归、分类、聚类、降维等。这些算法涵盖了从传统的线性模型到最新的深度学习算法的全面范围。

        c、丰富的功能: 除了基本的机器学习算法外,Scikit-Learn还提供了许多辅助功能,如特征选择、模型评估、交叉验证、管道等,帮助用户完成整个机器学习流程。

        d、性能优化: Scikit-Learn采用了优化的底层实现,使得训练和预测速度较快,可以处理大规模数据集。

        e、与其他Python库的集成: Scikit-Learn与其他Python科学计算库(如NumPy、SciPy和Matplotlib)以及数据处理库(如Pandas)无缝集成,使得用户可以方便地进行数据处理、可视化和模型评估。

        安装scikit-learn方法:两种方法安装最新版本

        操作系统:Windows

        包管理器:pip

        例如从https://www.python.org上安装Python 3的64位版本。

        然后运行如下代码:

pip install -U scikit-learn

        使用以下语句去检查:

python -m pip show scikit-learn # 查看scikit-learn安装的位置及安装的版本
python -m pip freeze # 查看所有在虚拟环境中已下载的包
python -c "import sklearn; sklearn.show_versions()"

        操作系统:Windows

        包管理器:conda

安装 conda        (不需要管理员权限)安装 conda

        然后运行:

conda install scikit-learn

        使用以下语句去检查:

conda list scikit-learn # 查看scikit-learn安装的位置及安装的版本
conda list # 查看所有在虚拟环境中已下载的包
python -c "import sklearn; sklearn.show_versions()"

        下面给出一个较为常见的例子进行分析该工具包的使用过程:在这个例子中,我们导入了NumPy库用于数据处理,以及Scikit-Learn的LinearRegression类用于线性回归模型。我们创建了一些示例数据X和y,然后使用fit方法训练模型,最后使用predict方法进行预测。

# 导入必要的库
import numpy as np
from sklearn.linear_model import LinearRegression

# 创建一些示例数据
X = np.array([[1], [2], [3], [4], [5]])
y = np.array([2, 4, 6, 8, 10])

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X, y)

# 进行预测
y_pred = model.predict([[6], [7]])

print(y_pred)

 02-Sklearn实现有监督学习

        Scikit-Learn提供了丰富的工具和算法用于有监督学习任务,包括回归和分类。下面我们将详细解释有监督学习的实现,并通过一个经典的线性回归例子进行分析,并可视化数据和模型预测结果。

        有监督学习的主要步骤包括数据准备、模型选择、训练和预测。我们以一个简单的线性回归为例,展示整个过程。

        数据准备: 首先,我们需要准备数据。在这个例子中,我们创建一个随机的线性数据集,并划分为训练集和测试集。

        模型选择: 接下来,我们选择一个回归模型来拟合数据。在这里,我们选择使用线性回归模型。

        训练模型: 我们使用训练集对模型进行训练,来拟合数据。

        预测: 最后,我们使用训练好的模型对测试集进行预测,并评估模型性能。

        具体代码如下:代码演示了一个典型的有监督学习过程,使用了Scikit-Learn进行线性回归任务的实现。

        a、数据准备:首先,使用NumPy生成了一个随机的线性数据集,其中X是一个在0到2之间均匀分布的随机数列,而y是对应的线性关系加上一些噪声。

        b、训练集和测试集划分:利用train_test_split函数将数据集划分为训练集和测试集,其中测试集占总数据集的20%。

        c、选择模型:这里选择了线性回归模型作为拟合数据的模型,使用Scikit-Learn的LinearRegression类。

        d、模型训练:使用训练集数据对线性回归模型进行训练,以找到最优的拟合参数。

        e、模型预测:利用训练好的模型对测试集进行预测,得到对应的预测结果y_pred

        f、可视化:最后,利用Matplotlib库将测试集的真实数据点以蓝色散点图的形式显示出来,并在同一图中用红色线条表示模型对测试集的预测结果。横轴为X值,纵轴为对应的y值,标题为"线性回归模型"。这样的可视化结果使我们能够直观地看到模型的拟合效果。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# 创建随机线性数据集
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.rand(100, 1)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 可视化
plt.scatter(X_test, y_test, color='blue')
plt.plot(X_test, y_pred, color='red')
plt.xlabel('X')
plt.ylabel('y')
plt.title('线性回归模型')
plt.savefig("../1.png", dpi=500)
plt.show()

        实例运行结果如下图所示:

 03-Sklearn实现无监督学习

        Sklearn提供了许多用于无监督学习任务的工具和算法,其中最常见的包括聚类和降维。我们将通过一个经典的聚类算法K均值(K-Means)来演示无监督学习的实现过程,并对结果进行可视化。

        无监督学习通常用于从数据中发现模式和结构,而不需要预先标记数据。K均值是一种常用的聚类算法,用于将数据点分成K个簇。

        数据准备: 首先,我们生成一些随机的数据来进行聚类。

        选择模型: 在这里,我们选择K均值算法作为聚类模型。

        模型训练: 使用K均值算法对数据进行聚类。

        可视化:最后,我们用不同颜色的散点图将聚类的结果进行可视化,以帮助理解聚类效果。

        具体代码如下:代码展示了如何使用Scikit-Learn实现无监督学习任务,以K均值算法为例进行了详细解释和演示。

        a、数据准备:首先,通过numpy生成了一个包含100个数据点的随机数据集X,每个数据点有两个特征。

        b、选择模型:选择了K均值算法作为聚类模型,使用Scikit-Learn的KMeans类来实现。

        c、模型训练:调用fit方法对数据进行聚类,K均值算法会将数据点分成指定数量的簇。

        d、可视化:最后,利用matplotlib库将聚类的结果可视化出来。每个数据点被归属到不同的簇,并用不同的颜色表示,这有助于直观地观察聚类效果。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# 生成随机数据
X = np.random.rand(100, 2)

# 创建K均值模型
model = KMeans(n_clusters=3)

# 训练模型
model.fit(X)

# 预测簇标签
labels = model.labels_

# 可视化
plt.scatter(X[:, 0], X[:, 1], c=labels, cmap='viridis')
plt.title('K-均值聚类')
plt.xlabel('X1')
plt.ylabel('X2')
plt.savefig("../2.png", dpi=500)
plt.show()

        实例运行结果如下图所示:

 04-Sklearn实现模型选择与评估

        Sklearn提供了许多模型选择和评估的工具,包括交叉验证、超参数调优等方法。在这里,我们将以经典的决策树模型为例进行详细解释和演示。

        模型选择与评估流程:

        数据准备:首先,我们加载一个经典的鸢尾花(Iris)数据集,这个数据集包含了三类不同的鸢尾花样本,每个样本有四个特征。

        选择模型:这里我们选择了决策树(Decision Tree)作为分类模型。

        交叉验证:使用交叉验证(Cross-Validation)方法来评估模型的性能。在这里我们使用K折交叉验证(K-Fold Cross Validation)来分割训练集。

        超参数调优:通过交叉验证,我们可以调整模型的超参数来提高性能。这里我们选择树的最大深度作为超参数进行调优。

        模型训练与评估:训练最优模型并评估性能。

        可视化:最后,我们用图形化的方式展示出决策树模型的结构,以便更好地理解该模型的决策过程。

        具体代码如下:代码展示了如何使用Scikit-Learn实现模型选择与评估的流程,以决策树分类器为例进行了详细解释和演示。

        a、数据准备:首先,通过load_iris()函数加载了鸢尾花数据集,其中包含了150个样本,每个样本有四个特征,对应着花萼和花瓣的长度和宽度。数据集中共有三种不同的鸢尾花,分别为Setosa、Versicolour和Virginica,对应着0、1、2三个类别。

        b、选择模型:在这个例子中,我们选择了决策树分类器作为模型,使用Scikit-Learn的DecisionTreeClassifier类来实现。

        c、交叉验证:我们使用了5折交叉验证(5-Fold Cross Validation)来评估模型的性能。cross_val_score函数返回了模型在每个交叉验证折叠上的得分,这里我们打印出了交叉验证的得分。

        d、超参数调优:为了提高模型性能,我们通过网格搜索(Grid Search)方法对决策树的最大深度进行调优。我们定义了一个参数网格param_grid,包含了最大深度从1到9的候选值。然后使用GridSearchCV类来进行网格搜索,找到最佳参数组合。打印出了找到的最佳参数值。

        e、模型训练与评估:使用交叉验证得到的最佳超参数,我们重新训练了一个最优的决策树模型,并将其存储在best_model变量中。

        f、可视化:最后,我们通过plot_tree函数将最优决策树模型的结构进行可视化。通过这个图,可以直观地看到每个节点的判断条件以及分支情况,有助于理解决策树模型的决策过程和逻辑。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import cross_val_score
from sklearn.model_selection import GridSearchCV
from sklearn.tree import plot_tree

# 加载数据
iris = load_iris()
X, y = iris.data, iris.target

# 创建决策树模型
model = DecisionTreeClassifier()

# 交叉验证评估模型性能
scores = cross_val_score(model, X, y, cv=5)
print("Cross-Validation Scores:", scores)

# 超参数调优
param_grid = {'max_depth': np.arange(1, 10)}
grid = GridSearchCV(model, param_grid, cv=5)
grid.fit(X, y)
print("Best Parameters:", grid.best_params_)

# 训练最优模型
best_model = grid.best_estimator_

# 绘制决策树
plt.figure(figsize=(12, 8))
plot_tree(best_model, filled=True, feature_names=iris.feature_names, class_names=iris.target_names)
plt.savefig("../3.png", dpi=500)
plt.show()

# 输出结果为
Cross-Validation Scores: [0.96666667 0.96666667 0.9        0.96666667 1.        ]
Best Parameters: {'max_depth': 5}

        实例运行结果如下图所示: 该图展示了一棵深度为3的决策树,每个内部节点表示一个特征和一个阈值,根据这个条件将数据分配到不同的子节点,直到叶节点,叶节点表示了最终的分类结果。通过观察这个图,可以清晰地理解模型是如何根据特征来进行分类的。

05-Sklearn实现基于排列的特征重要性

        基于排列的特征重要性是一种模型检查技术,可用于表格型数据中任一个拟合的估计器 。 这对于非线性或不可解释的估计器特别有用 。基于排列的特征重要性定义为单个特征取值被随机打乱时模型得分的降低程度。此过程破坏了特征与目标之间的关系,因此模型得分的下降程度表示了模型对特征的依赖程度。这种技术的好处在于它不依赖于模型,并且可以通过特征的不同排列进行多次计算。

        Permutation_Importance函数可以计算给定数据集的估计器的特征重要性。n_repeats参数设置特征取值随机重排的次数,并返回样本的特征重要性。

        下面将以随机森林模型为例进行详细解释和演示。

        Permutation Importance方法流程:

        数据准备:首先,我们加载一个经典的波士顿房价数据集,这个数据集包含了房屋的各项特征(比如房间数量、犯罪率等)以及房价作为目标变量。

        选择模型:在这个例子中,我们选择了随机森林(Random Forest)回归模型作为模型。

        训练模型:使用波士顿房价数据集训练随机森林回归模型。

        计算特征重要性:利用Permutation Importance方法计算各个特征的重要性,方法是对每个特征进行随机排列,观察模型预测性能的变化,重要性高的特征对模型影响较大。

        可视化:最后,我们通过图表展示各个特征的重要性,以便更直观地理解模型特征对预测的影响。

         具体代码如下:代码展示了如何使用Sklearn的Permutation Importance方法来评估模型中特征的重要性。下面是代码的详细解释:

        a、数据准备:首先,我们通过load_boston()函数加载了波士顿房价数据集,其中包含了房屋的各项特征(比如房间数量、犯罪率等)以及房价作为目标变量。boston.data包含了特征数据,boston.target包含了目标变量。

        b、选择模型:在这个例子中,我们选择了随机森林回归模型作为模型,使用Scikit-Learn的RandomForestRegressor类来实现。

        c、训练模型:使用波士顿房价数据集训练了随机森林回归模型,通过model.fit(X, y)完成模型训练。

        d、计算特征重要性:利用permutation_importance()函数计算各个特征的重要性。这个函数会对每个特征进行随机排列,然后观察模型预测性能的变化,重要性高的特征对模型影响较大。n_repeats参数指定了重复计算次数,random_state参数用于设置随机种子以确保结果的稳定性。

        e、可视化:最后,通过条形图展示了各个特征的重要性。result.importances_mean包含了每个特征的平均重要性得分,sorted_idx对这些得分进行排序,然后通过plt.barh()函数绘制水平条形图展示各个特征的重要性排序。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_boston
from sklearn.ensemble import RandomForestRegressor
from sklearn.inspection import permutation_importance
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# 加载数据
boston = load_boston()
X, y = boston.data, boston.target

# 创建随机森林回归模型
model = RandomForestRegressor()

# 训练模型
model.fit(X, y)

# 计算特征重要性
result = permutation_importance(model, X, y, n_repeats=10, random_state=42)

# 可视化特征重要性
sorted_idx = result.importances_mean.argsort()
plt.barh(boston.feature_names[sorted_idx], result.importances_mean[sorted_idx])
plt.xlabel("排列重要性")
plt.savefig("../4.png", dpi=500)
plt.show()

        实例运行结果如下图所示: 在生成的图中,我们可以看到各个特征的Permutation Importance值,即通过对每个特征进行随机排列后观察模型性能的变化,得出的重要性分数。条形图中的特征名称表示了对应的特征,条形的长度表示了特征的重要性得分,长度越长表示该特征对于模型的预测结果影响越大。

        通过观察图中的条形图,我们可以清晰地看到哪些特征对模型的预测有着较大的贡献,进而可以根据重要性排名来筛选最重要的特征进行模型训练或特征选择。这种可视化方式能够帮助我们了解模型中各个特征对预测结果的相对重要性,从而指导我们在特征选择和模型优化过程中做出更合理的决策。

 06-Sklearn实现带有可视化API的ROC曲线

        Sklearn提供了方便的API来生成带有可视化的ROC曲线,这有助于评估分类模型的性能,特别是在处理不平衡数据时非常有用。下面将以经典的二分类问题为例进行详细解释和演示。

        ROC曲线方法流程:

        数据准备:首先,我们加载一个经典的二分类数据集,比如手写数字识别数据集,其中包含了像素值作为特征和对应的标签(0或1)。

        选择模型:在这个例子中,我们选择了逻辑回归(Logistic Regression)分类器作为模型。

        训练模型:使用手写数字识别数据集训练逻辑回归分类器。

        生成ROC曲线:通过Sklearn的roc_curve函数计算ROC曲线的真阳性率(TPR)和假阳性率(FPR),并通过roc_auc_score计算AUC值(曲线下面积)来评估模型性能。

        可视化:最后,我们通过绘制ROC曲线图表展示模型的性能,以便更直观地了解模型在不同阈值下的整体表现。

        具体代码如下:在这个例子中,我们通过生成二分类数据集,并使用逻辑回归分类器构建了一个二分类模型。通过计算ROC曲线的真阳性率(TPR)和假阳性率(FPR),以及AUC值来评估模型性能。最后,通过绘制ROC曲线图表展示了模型的整体性能。

        下面是对代码的详细解释:

        导入必要的库:首先,导入了需要使用的Python库,包括NumPy用于数值计算,Matplotlib用于可视化,以及Scikit-learn中的相关模块用于生成数据集、构建模型和评估性能。

        生成二分类数据集:使用make_classification函数生成了一个具有1000个样本和20个特征的二分类数据集。这个函数是用于生成随机的二分类数据集,可以通过参数设置来控制数据集的各种属性,如样本数量、特征数量等。

        划分训练集和测试集:使用train_test_split函数将生成的数据集划分为训练集和测试集,其中测试集占总样本的30%。这一步是为了在模型训练和评估时能够独立地验证模型的性能。

        创建逻辑回归分类器:使用LogisticRegression类创建了一个逻辑回归分类器的实例。逻辑回归是一种用于解决二分类问题的线性模型,常用于预测概率值。

        训练模型:使用训练集数据对逻辑回归分类器进行训练,通过调用fit方法实现。模型将学习如何根据输入的特征对样本进行分类。

        预测概率:使用训练好的模型对测试集数据进行预测,并获取预测结果的概率值。这里使用predict_proba方法获取模型对每个样本属于正类的概率。

        计算ROC曲线的真阳性率、假阳性率和AUC值:通过调用roc_curve函数计算ROC曲线的真阳性率(TPR)、假阳性率(FPR)以及阈值,并使用roc_auc_score函数计算ROC曲线下的面积(AUC)来评估模型性能。

        可视化ROC曲线:最后,使用Matplotlib库绘制了ROC曲线图表。ROC曲线的横轴是FPR,纵轴是TPR,图中橙色曲线表示模型的ROC曲线,曲线下的面积(AUC)给出了模型性能的一个综合评价。虚线表示随机分类的ROC曲线,理想情况下,模型的ROC曲线应该尽量向左上方偏移,与随机分类的曲线相比越远越好。图例中显示了AUC值,提供了一个简洁的性能指标。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import roc_curve, roc_auc_score
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# 生成二分类数据集
X, y = make_classification(n_samples=1000, n_features=20, n_classes=2, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 创建逻辑回归分类器
model = LogisticRegression()

# 训练模型
model.fit(X_train, y_train)

# 预测概率
y_pred_prob = model.predict_proba(X_test)[:, 1]

# 计算ROC曲线的真阳性率、假阳性率和AUC值
fpr, tpr, thresholds = roc_curve(y_test, y_pred_prob)
auc = roc_auc_score(y_test, y_pred_prob)

# 可视化ROC曲线
plt.figure()
plt.plot(fpr, tpr, color='orange', label='ROC curve (area = %0.2f)' % auc)
plt.plot([0, 1], [0, 1], color='navy', linestyle='--')
plt.xlabel('误报率')
plt.ylabel('真阳性率')
plt.title('受试者工作特征(ROC)曲线')
plt.legend(loc="lower right")
plt.savefig("../5.png", dpi=500)
plt.show()

        实例运行结果如下图所示: 在生成的图中,我们可以看到各个特征的Permutation Importance值,即通过对每个特征进行随机排列后观察模型性能的变化,得出的重要性分数。条形图中的特征名称表示了对应的特征,条形的长度表示了特征的重要性得分,长度越长表示该特征对于模型的预测结果影响越大。        

 07-Sklearn实现数据集转换

        Sklearn中的数据集转换通常涉及数据预处理、特征工程和数据标准化等操作,这有助于提高模型的性能和准确性。常见的数据集转换方法包括标准化、归一化、编码分类变量等。下面以数据标准化为例进行详细解释,并提供一个经典的例子进行分析和可视化。

        数据标准化方法流程:

        数据准备:加载一个经典的数据集,比如鸢尾花数据集(Iris Dataset),该数据集包含了花的特征(如花萼长度、花萼宽度等)和对应的类别标签(鸢尾花的种类)。

        选择模型:在这个例子中,我们选择支持向量机分类器(Support Vector Machine, SVM)作为模型。

        数据标准化:使用Sklearn提供的数据标准化方法,如StandardScaler进行数据标准化处理。数据标准化可以将特征数据缩放到均值为0,方差为1的范围,以避免特征之间的差异对模型的影响。

        训练模型:使用数据标准化后的特征数据训练支持向量机分类器。

        评估模型:通过交叉验证等方法对模型性能进行评估,并可视化不同参数设置下的结果。

        具体代码如下:代码主要是一个完整的数据预处理和模型训练的流程,具体步骤如下:

        a、数据准备:加载了鸢尾花数据集,该数据集包含了花的特征和对应的类别标签。

        b、训练集和测试集划分:将加载的数据集划分为训练集和测试集,其中测试集占总样本的30%。

        c、数据标准化:使用StandardScaler对特征数据进行标准化处理,保证了特征的均值为0,方差为1。

        d、模型选择和训练:选择了支持向量机分类器(SVM)作为模型,并使用标准化后的训练数据对其进行训练。

        e、模型评估:使用测试集数据对训练好的模型进行评估,计算并输出了模型在测试集上的准确率。

# 导入必要的库
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import accuracy_score
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# 加载鸢尾花数据集
iris = load_iris()
X, y = iris.data, iris.target

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)

# 数据标准化
scaler = StandardScaler()
X_train_scaled = scaler.fit_transform(X_train)
X_test_scaled = scaler.transform(X_test)

# 创建支持向量机分类器
model = SVC()

# 训练模型
model.fit(X_train_scaled, y_train)

# 预测
y_pred = model.predict(X_test_scaled)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy}")
# 可视化标准化前后的特征分布
plt.figure(figsize=(12, 6))

# 标准化前的特征分布
plt.subplot(1, 2, 1)
plt.hist(X_train[:, 0], bins=20, color='blue', alpha=0.5, label='Feature 1')
plt.hist(X_train[:, 1], bins=20, color='red', alpha=0.5, label='Feature 2')
plt.xlabel('功能价值')
plt.ylabel('频率')
plt.title('标准化前的特征分布')
plt.legend()

# 标准化后的特征分布
plt.subplot(1, 2, 2)
plt.hist(X_train_scaled[:, 0], bins=20, color='blue', alpha=0.5, label='Feature 1')
plt.hist(X_train_scaled[:, 1], bins=20, color='red', alpha=0.5, label='Feature 2')
plt.xlabel('功能价值(标准化)')
plt.ylabel('频率')
plt.title('标准化后的特征分布')
plt.legend()

plt.tight_layout()
plt.savefig("../6.png", dpi=500)
plt.show()

        实例运行结果如下图所示: 生成的图像进行分析:

        标准化前的特征分布(左图):在标准化之前,特征的分布情况展示了原始数据的特点。每个特征的取值范围和尺度可能不同,因此特征之间的分布情况差异较大。

        标准化后的特征分布(右图):经过标准化处理后,特征的分布情况呈现出均值为0,方差为1的正态分布。可以看到,经过标准化后,特征的尺度统一,各特征之间的差异性变小,有利于模型的训练和收敛。

总结

        综合上述分析:虽然仅仅列出了Scikit-Learn的部分功能,足可以证明它是一个功能强大、易于上手的机器学习工具包,适用于各种使用场景。对于机器学习初学者来说,通过深入了解Scikit-Learn的各种功能和用法,将能够更好地利用这个工具包,提升机器学习模型的效果和性能。对于机器学习的能力的提升至关重要。

  • 39
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 37
    评论
### 回答1: scikit-learn是一个用于机器学习Python库。它提供了丰富的机器学习算法和工具,使得我们能够更加方便地进行数据挖掘和预测分析。 scikit-learn库内置了许多经典的监督学习和无监督学习算法,如线性回归、逻辑回归、决策树、支持向量机、聚类算法等。我们可以使用这些算法进行分类、回归和聚类等任务。此外,scikit-learn还提供了模型选择、特征选择和模型评估等功能,使得我们能够更好地进行模型优化和性能评估。 scikit-learn的优点之一是其简单易用的接口和一致的编程风格。我们只需使用相同的方法和参数即可应用不同的算法。这使得我们能够快速上手并且能够更好地理解和比较不同的算法。 此外,scikit-learn还具有丰富的文档和示例代码,使得我们能够更好地学习使用和掌握相关知识。我们可以利用这些文档和示例代码来了解算法的原理和使用方法,以及如何解决实际问题。 总之,scikit-learn是一个功能强大且易于使用的机器学习库。它提供了丰富的机器学习算法和工具,使得我们能够更加便捷地进行数据挖掘和预测分析,同时也提供了方便的模型选择和模型评估功能。无论是对于初学者还是有经验的机器学习工程师来说,scikit-learn都是一个不可或缺的工具。 ### 回答2: scikit-learn是一个用于机器学习Python库。它是一个开源的工具包,提供了许多用于机器学习的算法和工具,方便用户在数据处理、特征提取、模型训练和评估等方面进行工作。 scikit-learn内置了许多经典的机器学习算法,括回归算法、分类算法、聚类算法、降维算法等。这些算法都有统一的接口,使用起来非常方便。此外,scikit-learn还提供了用于数据预处理、特征选择、模型评估和性能提升等功能的工具和函数,使机器学习的整个流程更加简单和高效。 scikit-learn拥有广泛的应用领域,可以用于解决各种机器学习的问题。比如,可以使用scikit-learn进行文本分类、图像识别、情感分析、推荐系统等任务。scikit-learn还支持多种数据类型,可以处理结构化数据、时间序列数据和图像数据等。 使用scikit-learn进行机器学习的过程一般可以分为几个步骤。首先,需要准备并加载数据集,然后进行数据预处理,括缺失值处理、数据标准化和特征工程等。接下来,可以选择合适的模型进行训练,并使用交叉验证的方法来评估模型的性能。最后,可以使用训练好的模型来进行预测。 总之,scikit-learn为用户提供了一个强大且易于使用的机器学习工具,可以帮助用户快速构建和训练机器学习模型,从而解决实际问题。无论是对于初学者还是专业人士来说,scikit-learn都是一种强大的工具,可以极大地提高机器学习的效率和准确性。 ### 回答3: scikit-learn是一个用于数据挖掘和数据分析的Python库,也被广泛应用于机器学习领域。它提供了丰富的工具和算法,方便用户进行数据预处理、特征选择、模型训练与评估等各个环节。 首先,scikit-learn提供了大量的数据预处理工具,括标准化、归一化、缺失值处理等。通过这些工具,我们能够快速地对原始数据进行处理,使其适合机器学习算法的使用。 其次,scikit-learn还提供了丰富的特征选择方法,帮助我们筛选出对目标变量相关性较高的特征。这些方法括方差阈值、单变量特征选择、递归特征消除等。通过特征选择,我们能够减少特征的维度,提高模型训练的效率和准确性。 针对各种机器学习任务,scikit-learn提供了丰富的算法,如线性回归、逻辑回归、决策树、支持向量机、随机森林、K近邻等。这些算法具有良好的可解释性和表达能力,能够解决各种不同的问题。 此外,scikit-learn提供了丰富的模型评估指标和交叉验证方法,帮助我们评估模型的性能和泛化能力。通过这些评估指标,我们能够选择最优的模型,并进行模型的调参。 总之,scikit-learn是一个功能强大、易于使用且免费的机器学习库。它提供了丰富的工具和算法,帮助用户进行数据处理、特征选择、模型训练与评估等各个流程,并帮助用户构建高性能的机器学习模型。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一伦明悦

感谢,您的支持是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值