如何将UCI多特征数据集合并为CSV并用于机器学习任务?
问题解答
1. 将数据集合并为单个CSV文件
load_UCImultifeature返回的full_data是包含5个特征视图的列表(每个视图对应一组特征,比如傅里叶系数、像素特征等),每个视图是形状为(n_samples, n_features)的数组。要合并特征与标签并保存为CSV,可按以下两种方式操作:
方式1:拼接所有特征为单一矩阵
import pandas as pd import numpy as np from mvlearn.datasets import load_UCImultifeature # 加载数据集 full_data, full_labels = load_UCImultifeature() # 横向拼接所有视图的特征,得到单一特征矩阵 combined_features = np.hstack(full_data) # 合并特征与标签为DataFrame dataset = pd.DataFrame(combined_features) dataset['label'] = full_labels # 保存为CSV文件(index=False避免存储行索引) dataset.to_csv('multifeature_combined.csv', index=False)
方式2:保留多视图特征结构
如果需要区分不同视图的特征,可以为每个视图的特征添加前缀后合并:
# 为每个视图的特征添加前缀,区分不同来源 view_dfs = [] for i, view in enumerate(full_data): view_df = pd.DataFrame(view, columns=[f'view_{i}_feat_{j}' for j in range(view.shape[1])]) view_dfs.append(view_df) # 合并所有视图的DataFrame,再添加标签列 combined_df = pd.concat(view_dfs, axis=1) combined_df['label'] = full_labels # 保存 combined_df.to_csv('multifeature_separate_views.csv', index=False)
2. 数据集在PCA、聚类分析及监督模型中的应用
2.1 PCA(主成分分析)
PCA用于特征降维,建议先对特征做标准化处理(PCA对特征尺度敏感),支持单视图和多视图两种实现方式:
单视图PCA(基于拼接后的特征)
from sklearn.decomposition import PCA from sklearn.preprocessing import StandardScaler # 标准化特征 scaler = StandardScaler() scaled_features = scaler.fit_transform(combined_features) # 执行PCA,指定降维后的维度(比如2维用于可视化) pca = PCA(n_components=2) pca_transformed = pca.fit_transform(scaled_features) # 查看各主成分的方差解释率 print(f"主成分方差解释率: {pca.explained_variance_ratio_}")
多视图PCA(利用多视图间的关联信息)
from mvlearn.decomposition import MultiviewPCA # 多视图PCA,将每个视图降维到2维 mv_pca = MultiviewPCA(n_components=2) mv_pca_transformed = mv_pca.fit_transform(full_data) # 每个视图的降维结果存储在mv_pca_transformed的列表中
2.2 聚类分析
以KMeans为例,支持单视图和多视图两种聚类方式:
单视图KMeans聚类
from sklearn.cluster import KMeans from sklearn.metrics import adjusted_rand_score, silhouette_score # 初始化KMeans,设置聚类数为数据集的类别数(10类,对应数字0-9) kmeans = KMeans(n_clusters=10, random_state=42) cluster_labels = kmeans.fit_predict(scaled_features) # 评估聚类效果:调整兰德指数(对比真实标签)、轮廓系数 ari = adjusted_rand_score(full_labels, cluster_labels) sil_score = silhouette_score(scaled_features, cluster_labels) print(f"调整兰德指数: {ari:.3f}") print(f"轮廓系数: {sil_score:.3f}")
多视图KMeans聚类
from mvlearn.cluster import MultiviewKMeans mv_kmeans = MultiviewKMeans(n_clusters=10, random_state=42) mv_cluster_labels = mv_kmeans.fit_predict(full_data) # 评估多视图聚类效果 mv_ari = adjusted_rand_score(full_labels, mv_cluster_labels) print(f"多视图KMeans调整兰德指数: {mv_ari:.3f}")
2.3 监督机器学习模型(以判别分析为例)
以线性判别分析(LDA)为例,展示完整的训练、评估流程,也可替换为随机森林、SVM等其他监督模型:
from sklearn.discriminant_analysis import LinearDiscriminantAnalysis from sklearn.model_selection import train_test_split from sklearn.metrics import accuracy_score, classification_report # 划分训练集与测试集(8:2比例) X_train, X_test, y_train, y_test = train_test_split( scaled_features, full_labels, test_size=0.2, random_state=42 ) # 训练LDA模型 lda = LinearDiscriminantAnalysis() lda.fit(X_train, y_train) # 预测并评估 y_pred = lda.predict(X_test) print(f"LDA测试集准确率: {accuracy_score(y_test, y_pred):.3f}") print("\n分类报告:\n", classification_report(y_test, y_pred)) # 示例:替换为随机森林模型 from sklearn.ensemble import RandomForestClassifier rf = RandomForestClassifier(n_estimators=100, random_state=42) rf.fit(X_train, y_train) rf_pred = rf.predict(X_test) print(f"\n随机森林测试集准确率: {accuracy_score(y_test, rf_pred):.3f}")
内容的提问来源于stack exchange,提问作者Maale Faustus
相关产品推荐
相关产品推荐

