如何拆分sklearn中wine数据集元组并合并为含class列的矩阵?
解决Wine数据集拆分与合并问题
先搞懂dt的结构
当你用load_wine(return_X_y=True)时,返回的dt是一个元组,里面装着两个数组:
- 第一个是特征数组(记为X),对应178个样本的13个特征,形状是
(178, 13) - 第二个是标签数组(记为y),对应每个样本的类别,形状是
(178,)
元组没法用np.split拆分,直接用元组解包就能拿到单独的X和y,比你想的简单。
步骤1:拆分特征与标签
一行代码搞定:
X, y = dt
执行完这行,X就是所有特征数据,y就是对应的类别标签。
步骤2:合并成最后一列为class的矩阵
给你两种实用方法,选顺手的用:
方法1:用Numpy合并(得到纯数组)
因为y是一维数组,得先转成二维列向量,再和X横向拼接:
# 把y转成(178,1)的列向量 y_col = y.reshape(-1, 1) # 横向拼接X和y_col,得到最后一列是class的矩阵 wine_matrix = np.hstack((X, y_col))
方法2:用Pandas合并(得到带列名的表格,更直观)
如果你想清楚看到每列对应的特征名称,用Pandas更合适:
# 重新获取完整数据集对象,拿到特征名 wine_full = load_wine() # 把X转成DataFrame,加上特征列名 wine_df = pd.DataFrame(X, columns=wine_full.feature_names) # 把y作为最后一列,命名为'class' wine_df['class'] = y
打印wine_df.head()就能直接看到前5行带列名的数据,新手看这个更清楚。
完整示例代码
import numpy as np import pandas as pd from sklearn.datasets import load_wine # 获取数据集元组 dt = load_wine(return_X_y=True) # 拆分特征和标签 X, y = dt # Numpy合并方式 y_col = y.reshape(-1, 1) wine_matrix = np.hstack((X, y_col)) print("Numpy合并后的矩阵形状:", wine_matrix.shape) # Pandas合并方式 wine_full = load_wine() wine_df = pd.DataFrame(X, columns=wine_full.feature_names) wine_df['class'] = y print("\nPandas合并后的前5行数据:") print(wine_df.head())
内容的提问来源于stack exchange,提问作者user21840125
相关产品推荐
相关产品推荐

