章节大纲

  • 我们也可以不手动操作,而是使用 pandas 模块提供的散点图矩阵

    散点图矩阵可以显示数据集中所有特征之间的散点图,以及每个特征的分布直方图。

    Python
    import pandas as pd
    import matplotlib.pyplot as plt # 导入 matplotlib 以便显示图表
    
    # 将 Iris 数据转换为 Pandas DataFrame
    iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
    
    # 生成散点图矩阵
    pd.plotting.scatter_matrix(iris_df,
                               c=iris.target, # 根据目标类别着色
                               figsize=(8, 8) # 设置图表大小
                              )
    plt.show() # 显示图表
    

    3D 可视化

    为了更全面地理解数据,我们可以尝试进行三维可视化。

    Python
    import matplotlib.pyplot as plt
    from sklearn.datasets import load_iris
    from mpl_toolkits.mplot3d import Axes3D # 导入 3D 绘图工具
    
    iris = load_iris()
    
    X = []
    for iclass in range(3):
        X.append([[], [], []]) # 为每个类别初始化三个空列表,分别用于存储 x, y, z 坐标
    
    # 遍历 Iris 数据集,根据类别将数据分配到 X 中
    for i in range(len(iris.data)):
        if iris.target[i] == iclass:
            X[iclass][0].append(iris.data[i][0]) # 萼片长度作为 x 轴
            X[iclass][1].append(iris.data[i][1]) # 萼片宽度作为 y 轴
            X[iclass][2].append(sum(iris.data[i][2:])) # 花瓣长度和花瓣宽度之和作为 z 轴
    
    colours = ("r", "g", "y") # 定义不同类别的颜色 (红、绿、黄)
    
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d') # 创建一个 3D 子图
    
    # 为每个类别绘制散点图
    for iclass in range(3):
        ax.scatter(X[iclass][0], X[iclass][1], X[iclass][2], c=colours[iclass])
    
    plt.show() # 显示 3D 散点图
    

    Instead of doing it manually we can also use the scatterplot matrix provided by the pandas module.
    Scatterplot matrices show scatter plots between all features in the data set, as well as histograms to show the
    distribution of each feature.
    import pandas as pd
    iris_df = pd.DataFrame(iris.data, columns=iris.feature_names)
    pd.plotting.scatter_matrix(iris_df,
    c=iris.target,
    figsize=(8, 8)
    );
    27
    3-DIMENSIONAL VISUALIZATION
    import matplotlib.pyplot as plt
    from sklearn.datasets import load_iris
    from mpl_toolkits.mplot3d import Axes3D
    iris = load_iris()
    X = []
    for iclass in range(3):
    X.append([[], [], []])
    for i in range(len(iris.data)):
    if iris.target[i] == iclass:
    X[iclass][0].append(iris.data[i][0])
    X[iclass][1].append(iris.data[i][1])
    X[iclass][2].append(sum(iris.data[i][2:]))
    colours = ("r", "g", "y")
    fig = plt.figure()
    ax = fig.add_subplot(111, projection='3d')
    for iclass in range(3):
    ax.scatter(X[iclass][0], X[iclass][1], X[iclass][2], c=colour
    s[iclass])
    plt.show()