【机器学习-07】 | Scikit-Learn工具包进阶指南:Scikit-Learn工具包之自带数据集示例分析

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

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

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

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

如果文章有所帮助,欢迎留下您宝贵的评论,

点赞加收藏支持我,点击关注,一起进步!

前言                    

        sklearn.datasets是scikit-learn库中用于加载示例数据集的模块。它包含了一些常用的数据集,可以用来进行机器学习算法的练习和测试。这些数据集通常被用来探索、理解和验证机器学习算法的性能。

        该模块提供了几种不同类型的数据集,包括分类、回归、聚类和文本数据。这些数据集都是经过预处理的,以便直接用于算法的训练和评估。一些常见的数据集包括:

         分类数据集:例如load_iris(鸢尾花数据集)、load_digits(手写数字数据集)、load_wine(红酒数据集)等。

        回归数据集:例如load_boston(波士顿房价数据集)、load_diabetes(糖尿病数据集)等。        

        聚类数据集:例如load_iris(鸢尾花数据集,也可以用于聚类任务)、make_blobs(生成随机的聚类数据)等。

        文本数据集:例如fetch_20newsgroups(用于文本分类的新闻组数据集)、fetch_20newsgroups_vectorized(与前者相同,但以稀疏特征表示)等。 

        使用这些数据集可以帮助开发者快速开始机器学习项目,而无需担心数据收集和预处理的问题。

正文

01-数字数据集简介                    

        数字数据集通常用于回归问题,其中包含一些数字特征和相应的目标变量。在scikit-learn中,常见的数字数据集是波士顿房价数据集(Boston house prices dataset),也称为load_boston数据集。

        这个数据集包含了波士顿地区的房屋信息,包括房屋的各种特征(比如犯罪率、房间数量、房屋年龄等),以及对应的房价。下面是一个简单的代码示例,演示如何加载并查看波士顿房价数据集:

        这段代码首先从sklearn.datasets中导入load_boston函数,然后使用该函数加载波士顿房价数据集。接着打印了数据集的描述信息、特征名称、数据矩阵的形状以及目标变量的形状。

from sklearn.datasets import load_boston

# 加载波士顿房价数据集
boston = load_boston()

# 查看数据集的描述信息
print(boston.DESCR)

# 查看数据集的特征名称
print("Feature names:", boston.feature_names)

# 查看数据集的数据(特征矩阵)
print("Data shape:", boston.data.shape)

# 查看数据集的目标变量(房价)
print("Target shape:", boston.target.shape)

        下面给出具体代码分析过程:这段代码的作用是加载手写数字数据集(digits dataset),并显示数据集中最后一幅手写数字图像。首先,使用datasets.load_digits()函数加载手写数字数据集,然后通过plt.imshow()函数显示数据集中最后一幅图像。

        具体解释绘制的图像:

        图像大小为 3x3(单位为英寸)。

  plt.imshow(digits.images[-1], cmap=plt.cm.gray_r, interpolation='nearest') 绘制了数据集中最后一幅手写数字的灰度图像,cmap=plt.cm.gray_r表示使用灰度颜色映射,interpolation='nearest'表示不对图像进行插值处理,保持像素原始大小。        

        手写数字数据集包含了由0到9的手写数字图像,每幅图像都是8x8像素的灰度图像。每个像素的值介于0和16之间,表示像素的亮度。我们可以通过可视化这些图像,来了解每个数字的手写风格,以便后续进行机器学习任务,比如数字识别。

from sklearn import datasets

import matplotlib.pyplot as plt

#Load the digits dataset
digits = datasets.load_digits()

#Display the first digit
plt.figure(1, figsize=(3, 3))
plt.imshow(digits.images[-1], cmap=plt.cm.gray_r, interpolation='nearest')
plt.savefig("../4.png", dpi=500)
plt.show()

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

02-Iris数据集实例分析                    

        Iris数据集是机器学习和统计领域中经常用来演示分类算法的经典数据集之一。它包含了3类(Setosa,Versicolour,Virginica)鸢尾花的特征数据,总共有150个样本,每个样本包含4个特征:萼片长度(sepal length)、萼片宽度(sepal width)、花瓣长度(petal length)和花瓣宽度(petal width)。在scikit-learn库中,可以使用load_iris函数来加载这个数据集。

        下面是一个对Iris数据集的详细分析示例:代码首先加载Iris数据集,然后将数据转换为DataFrame格式以便查看和操作。接着通过info()方法查看数据集的基本信息,包括每个特征的数据类型和缺失值情况。然后通过head()方法查看数据集的前5行数据,以及通过value_counts()方法查看各类别样本的数量。最后,使用describe()方法查看数据集的描述统计信息,包括均值、标准差、最小/大值等。

from sklearn.datasets import load_iris
import pandas as pd

# 加载Iris数据集
iris = load_iris()

# 将数据集转换为DataFrame,便于查看和操作
df = pd.DataFrame(data=iris.data, columns=iris.feature_names)
df['target'] = iris.target

# 查看数据集的基本信息
print("数据集的基本信息:")
print(df.info())

# 查看数据集的前几行数据
print("\n数据集的前5行数据:")
print(df.head())

# 查看各类别样本的数量
print("\n各类别样本的数量:")
print(df['target'].value_counts())

# 查看数据集的描述统计信息
print("\n数据集的描述统计信息:")
print(df.describe())

        下面给出具体代码分析应用过程:这段代码的作用是对鸢尾花数据集进行可视化分析。首先,使用matplotlib库绘制了一个二维散点图,显示了鸢尾花样本的萼片长度与萼片宽度之间的关系。不同类别的鸢尾花用不同的颜色表示,使得我们能够直观地观察到它们在这个二维空间中的分布情况。

        接着,使用三维散点图展示了前三个主成分分析(PCA)的结果,将鸢尾花数据集从原始的四维特征空间降维到了三维空间。每个样本点在这个三维空间中的位置是由前三个主成分的投影决定的。同样,不同类别的鸢尾花用不同的颜色表示。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn import datasets
from sklearn.decomposition import PCA
plt.rcParams['font.sans-serif'] = ['SimHei']  #解决中文显示乱码问题
plt.rcParams['axes.unicode_minus'] = False 
# import some data to play with
iris = datasets.load_iris()
X = iris.data[:, :2]  # we only take the first two features.
y = iris.target

x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5

plt.figure(2, figsize=(8, 6))
plt.clf()

# Plot the training points
plt.scatter(X[:, 0], X[:, 1], c=y, cmap=plt.cm.Set1,
            edgecolor='k')
plt.xlabel('萼片长度')
plt.ylabel('萼片宽度')

plt.xlim(x_min, x_max)
plt.ylim(y_min, y_max)
plt.xticks(())
plt.yticks(())
plt.savefig("../4.png", dpi=500)


fig = plt.figure(1, figsize=(8, 6))
ax = Axes3D(fig, elev=-150, azim=110)
X_reduced = PCA(n_components=3).fit_transform(iris.data)
ax.scatter(X_reduced[:, 0], X_reduced[:, 1], X_reduced[:, 2], c=y,
           cmap=plt.cm.Set1, edgecolor='k', s=40)
ax.set_title("前三个PCA方向")
ax.set_xlabel("1st 特征向量")
ax.w_xaxis.set_ticklabels([])
ax.set_ylabel("2nd 特征向量")
ax.w_yaxis.set_ticklabels([])
ax.set_zlabel("3rd 特征向量")
ax.w_zaxis.set_ticklabels([])
plt.savefig("../5.png", dpi=500)
plt.show()

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

        二维散点图显示了萼片长度与萼片宽度之间的关系,每个点代表一个样本,不同颜色代表不同类别的鸢尾花。我们可以观察到不同类别的鸢尾花在这个二维空间中的分布情况,以及它们之间的分界情况。

        三维散点图展示了前三个主成分分析的结果,将鸢尾花数据集降维到了三维空间。每个点的位置由前三个主成分的投影决定,不同颜色代表不同类别的鸢尾花。通过观察这个三维空间中的分布情况,我们可以更好地理解数据集的结构和特征之间的关系。

 

03-绘制随机生成的分类数据集                   

        下面给出代码分析应用过程,这段代码的目的是生成不同类型的随机分类数据集,并使用matplotlib对其进行可视化分析。让我们逐个分析每幅图像和生成数据集的特点:

        第一幅图 - 一个信息功能,每个类一个集群:使用make_classification生成的数据集,具有2个特征,每个类别只有一个簇。可观察到数据点分布在一个簇内,类别之间的边界比较清晰,每个类别用不同颜色表示。

        第二幅图 - 两个信息功能,每个类一个集群:同样使用make_classification生成,但这次有两个信息特征。每个类别仍然只有一个簇,但数据点在特征空间中的分布更加复杂,类别之间的区分度较高。

        第三幅图 - 两个信息功能,每个类两个集群:继续使用make_classification,但这次每个类别有两个簇。可以看到每个类别内部有两个集群,这使得类别内部的数据点分布更为复杂,而类别之间的边界仍然是清晰的。

        第四幅图 - 多类,两个信息功能,一个集群:同样使用make_classification,但这次生成了3个类别,每个类别有两个信息特征和一个簇。可以看到数据点分布在三个类别中,每个类别内部只有一个集群,但不同类别之间的特征分布和边界可以更清楚地区分。

        第五幅图 - 三个 blob:使用make_blobs生成的数据集,具有3个高斯分布中心,每个类别有多个簇。每个类别的数据点分布在不同的高斯分布中心周围,每个类别内部的数据点密度和分布方式由高斯分布的参数决定。

        第六幅图 - 高斯分为三个分位数:使用make_gaussian_quantiles生成的数据集,具有3个类别,每个类别由多维高斯分布生成,具有不同的协方差矩阵。每个类别的数据点分布在多维高斯分布的分位数区域内,显示出不同类别之间更复杂的特征分布和重叠情况。

        通过这些可视化图像,我们可以直观地比较不同生成函数及其参数对生成数据集的影响。make_classification主要用于生成复杂度不同的二分类数据集,而make_blobsmake_gaussian_quantiles则更适合生成多类别或多簇的数据集,显示出不同类别间的分布和区分度。这些分析有助于理解和评估不同数据集生成方法在机器学习任务中的应用和效果。

import matplotlib.pyplot as plt

from sklearn.datasets import make_classification
from sklearn.datasets import make_blobs
from sklearn.datasets import make_gaussian_quantiles

plt.figure(figsize=(8, 8))
plt.subplots_adjust(bottom=.05, top=.9, left=.05, right=.95)

plt.subplot(321)
plt.title("一个信息功能,每个类一个集群", fontsize='small')
X1, Y1 = make_classification(n_features=2, n_redundant=0, n_informative=1,
                             n_clusters_per_class=1)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,
            s=25, edgecolor='k')

plt.subplot(322)
plt.title("两个信息功能,每个类一个集群", fontsize='small')
X1, Y1 = make_classification(n_features=2, n_redundant=0, n_informative=2,
                             n_clusters_per_class=1)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,
            s=25, edgecolor='k')

plt.subplot(323)
plt.title("两个信息功能,每个类两个集群",
          fontsize='small')
X2, Y2 = make_classification(n_features=2, n_redundant=0, n_informative=2)
plt.scatter(X2[:, 0], X2[:, 1], marker='o', c=Y2,
            s=25, edgecolor='k')

plt.subplot(324)
plt.title("多类,两个信息功能,一个集群",
          fontsize='small')
X1, Y1 = make_classification(n_features=2, n_redundant=0, n_informative=2,
                             n_clusters_per_class=1, n_classes=3)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,
            s=25, edgecolor='k')

plt.subplot(325)
plt.title("三个 blob", fontsize='small')
X1, Y1 = make_blobs(n_features=2, centers=3)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,
            s=25, edgecolor='k')

plt.subplot(326)
plt.title("高斯分为三个分位数", fontsize='small')
X1, Y1 = make_gaussian_quantiles(n_features=2, n_classes=3)
plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,
            s=25, edgecolor='k')
plt.savefig("../5.png", dpi=500)
plt.show()

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

04-绘制随机生成的多标签数据集                  

        随机生成的多标签数据集是指每个样本可以被赋予多个标签,而不仅仅是单一标签。这在某些机器学习任务中是非常常见的,比如多标签分类问题、标签传播等。让我们对生成的多标签数据集进行详细解释:

  1. 数据集生成

    • 使用make_multilabel_classification函数可以生成多标签数据集。
    • 可以通过参数控制数据集的特征数、类别数量、簇数、标签数等。
    • 每个样本可以同时属于多个类别,标签之间可能存在重叠或相关性。
  2. 可视化分析

    • 每个样本的标签情况可能比较复杂,需要使用合适的方式来展示多标签数据集。
    • 可以绘制子图或者使用复杂的可视化技巧来展示样本的多标签情况。
    • 不同样本之间标签的重叠或者分布情况可以通过可视化辅助理解。
  3. 数据分析

    • 对多标签数据集进行分析时,需要考虑每个样本可能对应多个标签,标签之间的相关性以及标签的分布情况。
    • 可以对样本的标签组合进行统计分析,比如每种标签组合的频率分布、不同标签的共现情况等。
    • 分析样本的标签情况可以帮助理解数据集的复杂性,为后续的模型训练和评估提供参考。

        通过绘制随机生成的多标签数据集并进行详细解释与分析,可以帮助深入理解多标签数据集的特点和结构,为处理多标签分类问题提供指导和思路。这种分析有助于选择合适的模型和评估指标,以有效处理多标签数据集,并实现准确的多标签分类任务。

        下面给出具体代码分析应用过程:这部分代码主要是使用 sklearn 库中的 make_multilabel_classification 函数生成多标签分类数据集,并利用 matplotlib 库进行可视化。接下来,对代码和生成的图像进行详细分析:

        导入了 numpy 和 matplotlib 库,以及 make_multilabel_classification 函数。

        定义了一个颜色数组 COLORS,用于标记不同类别的数据点。

        设置了随机种子 RANDOM_SEED 以确保多次调用 make_multilabel_classification 生成相同分布的数据。

        定义了一个 plot_2d 函数,用于生成二维数据并绘制散点图。

        利用 make_ml_clf 函数生成多标签分类数据集 X,Y,并获取类别分布信息 p_c 和 特征分布信息 p_w_c。

        使用散点图显示数据点,其中不同颜色代表不同的类别,并用星号表示特征分布信息

import numpy as np
import matplotlib.pyplot as plt

from sklearn.datasets import make_multilabel_classification as make_ml_clf

print(__doc__)

COLORS = np.array(['!',
                   '#FF3333',  # red
                   '#0198E1',  # blue
                   '#BF5FFF',  # purple
                   '#FCD116',  # yellow
                   '#FF7216',  # orange
                   '#4DBD33',  # green
                   '#87421F'   # brown
                   ])

# Use same random seed for multiple calls to make_multilabel_classification to
# ensure same distributions
RANDOM_SEED = np.random.randint(2 ** 10)


def plot_2d(ax, n_labels=1, n_classes=3, length=50):
    X, Y, p_c, p_w_c = make_ml_clf(n_samples=150, n_features=2,
                                   n_classes=n_classes, n_labels=n_labels,
                                   length=length, allow_unlabeled=False,
                                   return_distributions=True,
                                   random_state=RANDOM_SEED)

    ax.scatter(X[:, 0], X[:, 1], color=COLORS.take((Y * [1, 2, 4]
                                                    ).sum(axis=1)),
               marker='.')
    ax.scatter(p_w_c[0] * length, p_w_c[1] * length,
               marker='*', linewidth=.5, edgecolor='black',
               s=20 + 1500 * p_c ** 2,
               color=COLORS.take([1, 2, 4]))
    ax.set_xlabel('Feature 0 count')
    return p_c, p_w_c


_, (ax1, ax2) = plt.subplots(1, 2, sharex='row', sharey='row', figsize=(8, 4))
plt.subplots_adjust(bottom=.15)

p_c, p_w_c = plot_2d(ax1, n_labels=1)
ax1.set_title('n_labels=1, length=50')
ax1.set_ylabel('Feature 1 count')

plot_2d(ax2, n_labels=3)
ax2.set_title('n_labels=3, length=50')
ax2.set_xlim(left=0, auto=True)
ax2.set_ylim(bottom=0, auto=True)
plt.savefig("../5.png", dpi=500)
plt.show()

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

        第一幅图(n_labels=1, length=50)展示了单标签分类的数据分布情况,横坐标为特征 0 的计数,纵坐标为特征 1 的计数。

        第二幅图(n_labels=3, length=50)展示了三标签分类的数据分布情况,同样横纵坐标表示特征计数。

        在两幅图中,不同颜色代表不同类别的数据点,星号代表特征的分布情况,星号大小随概率大小变化,颜色代表特征所属类别。

总结                    

        sklearn.datasets 模块包含了一些用于机器学习的常用数据集,可以让开发者方便地获取数据用于模型训练和测试。以下是 sklearn.datasets 模块中一些常用的数据集:

   load_iris: 包含了鸢尾花数据集,数据集包括了三种不同类型的鸢尾花的萼片和花瓣的长度和宽度,用于分类问题。

   load_digits: 包含了手写数字数据集,数据集包括了 8x8 的图像数据,用于识别0到9的手写数字。

   load_boston: 包含了波士顿房价数据集,数据集包括了波士顿地区的房屋信息如犯罪率、房屋价格等,用于回归问题。

   fetch_openml: 可以用于下载和获取来自 OpenML 平台的数据集,包括各种类型的数据集。

   make_classification: 用于生成分类问题的合成数据集,可以指定样本数、特征数、类别数等参数。

   make_regression: 用于生成回归问题的合成数据集,可以指定样本数、特征数、噪声等参数。

        除了上述数据集之外,sklearn.datasets 还包括其他一些数据集生成函数,可以帮助用户方便地生成用于模型训练和测试的数据。这些数据集的使用可以帮助开发者快速上手机器学习任务,做实验和模型验证。

  • 8
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一伦明悦

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

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

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

打赏作者

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

抵扣说明:

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

余额充值