处理数据及其选择关键列进行一次聚类

1. 数据加载与初步处理

python 复制代码
# 文件路径
file_path = '../data/all_database_result.csv'

# 读取CSV文件到DataFrame
df = pd.read_csv(file_path)

# 选择特定的特征列
selected_features = ['Q10', 'Q12', 'Q13', 'Q14']

# 缺失值处理:这里简单地删除含有任何缺失值的行
df.dropna(subset=selected_features, inplace=True)
  • 目的:从指定路径加载数据,并选择用于聚类的特定特征列。
  • 操作 :使用 pandas 库读取CSV文件,然后删除包含缺失值的行。

2. 异常值处理

复制代码
# 异常值处理:基于Z-score去除异常值
z_scores = np.abs((df[selected_features] - df[selected_features].mean()) / df[selected_features].std())
df = df[(z_scores < 3).all(axis=1)]  # 假设Z-score大于3为异常值

目的:识别并移除异常值,防止它们影响聚类效果。

操作:计算每行在选定特征上的Z分数(标准化后的距离),并将所有Z分数绝对值小于3的行保留下来,认为其他行为异常值并移除。

3. 数据标准化

复制代码
# 数据标准化(Standardization)
scaler = StandardScaler()
df_normalized = scaler.fit_transform(df[selected_features])

目的:将不同特征的尺度统一,使得每个特征的均值为0,标准差为1。

操作 :使用 StandardScaler 对选定特征进行标准化处理。

4. PCA降维(可选)

复制代码
python 复制代码
使用PCA进行降维
pca = PCA(n_components=2)  # 或者根据需要调整n_components
df_pca = pca.fit_transform(df_normalized)

目的:减少数据维度,可能有助于提高聚类算法的效率和效果。

操作:使用主成分分析(PCA)将数据降至二维或三维,便于可视化和进一步分析。

5. 第一阶段聚类

python 复制代码
# 第一阶段聚类:尝试不同的簇数并计算轮廓系数
silhouette_scores = []
cluster_range = range(2, 11)  # 尝试从2到10个簇

for k in cluster_range:
    # 应用KMeans
    kmeans = KMeans(n_clusters=k, random_state=42)
    clusters = kmeans.fit_predict(df_pca)
    
    # 计算轮廓系数
    silhouette_avg = silhouette_score(df_pca, clusters)
    silhouette_scores.append(silhouette_avg)
    print(f"对于 {k} 个簇,轮廓系数为: {silhouette_avg}")

# 找出具有最佳轮廓系数的簇数
best_k_first_stage = cluster_range[silhouette_scores.index(max(silhouette_scores))]
print(f"\n第一阶段最佳簇数为 {best_k_first_stage},对应的轮廓系数为: {max(silhouette_scores)}")

目的:确定最佳簇数,通过比较不同簇数下的轮廓系数来选择最优的簇数。

操作:循环遍历不同的簇数(从2到10),对每个簇数应用KMeans聚类,并计算相应的轮廓系数,选择轮廓系数最高的簇数作为第一阶段的最佳簇数。

6. 第二阶段聚类

python 复制代码
# 使用最佳簇数进行第一次聚类
kmeans_first_stage = KMeans(n_clusters=best_k_first_stage, random_state=42)
clusters_first_stage = kmeans_first_stage.fit_predict(df_pca)

# 第二阶段聚类:固定簇数为3
final_k = 3
kmeans_final = KMeans(n_clusters=final_k, random_state=42)
clusters_final = kmeans_final.fit_predict(df_pca)

# 计算最终聚类的轮廓系数
silhouette_avg_final = silhouette_score(df_pca, clusters_final)
print(f"\n最终聚类结果为 {final_k} 个簇,对应的轮廓系数为: {silhouette_avg_final}")

目的:基于第一阶段的结果,再次应用KMeans聚类,这次将簇数固定为3,得到最终的聚类结果。

操作:首先使用第一阶段确定的最佳簇数进行聚类,然后固定簇数为3进行第二次聚类,并计算最终聚类结果的轮廓系数。

7. 结果保存

python 复制代码
# 将最终聚类结果添加回原始DataFrame,并命名为'result'
df['result'] = clusters_final

# 打印前几行查看结果
print("\n包含最终聚类结果的数据框:")
print(df.head())

# 如果需要保存结果到新的CSV文件
output_file_path = '../data/all_database_result_with_final_clusters.csv'
df.to_csv(output_file_path, index=False)
print(f"\n结果已保存到: {output_file_path}")

目的:将最终的聚类结果保存回原始数据框,并导出到一个新的CSV文件中。

操作 :将最终的聚类标签添加到数据框中,并使用 to_csv 方法保存结果。

相关推荐
美狐美颜sdk1 小时前
跨平台直播美颜SDK集成实录:Android/iOS如何适配贴纸功能
android·人工智能·ios·架构·音视频·美颜sdk·第三方美颜sdk
DeepSeek-大模型系统教程2 小时前
推荐 7 个本周 yyds 的 GitHub 项目。
人工智能·ai·语言模型·大模型·github·ai大模型·大模型学习
郭庆汝2 小时前
pytorch、torchvision与python版本对应关系
人工智能·pytorch·python
IT古董2 小时前
【第二章:机器学习与神经网络概述】03.类算法理论与实践-(3)决策树分类器
神经网络·算法·机器学习
小雷FansUnion4 小时前
深入理解MCP架构:智能服务编排、上下文管理与动态路由实战
人工智能·架构·大模型·mcp
资讯分享周4 小时前
扣子空间PPT生产力升级:AI智能生成与多模态创作新时代
人工智能·powerpoint
叶子爱分享5 小时前
计算机视觉与图像处理的关系
图像处理·人工智能·计算机视觉
鱼摆摆拜拜5 小时前
第 3 章:神经网络如何学习
人工智能·神经网络·学习
一只鹿鹿鹿5 小时前
信息化项目验收,软件工程评审和检查表单
大数据·人工智能·后端·智慧城市·软件工程
张较瘦_5 小时前
[论文阅读] 人工智能 | 深度学习系统崩溃恢复新方案:DaiFu框架的原位修复技术
论文阅读·人工智能·深度学习