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

server/2025/2/7 13:32:04/
  • 1. 数据加载与初步处理

    # 文件路径
    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降维(可选)

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

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

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

 

 5. 第一阶段聚类

# 第一阶段聚类:尝试不同的簇数并计算轮廓系数
silhouette_scores = []
cluster_range = range(2, 11)  # 尝试从2到10个簇for k in cluster_range:# 应用KMeanskmeans = 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. 第二阶段聚类

# 使用最佳簇数进行第一次聚类
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. 结果保存

# 将最终聚类结果添加回原始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 方法保存结果。


http://www.ppmy.cn/server/165688.html

相关文章

在 Linux 中,进程的状态 I 表示什么

在 Linux 中&#xff0c;进程的状态 I 表示 Idle&#xff08;空闲&#xff09;状态。进程处于 I 状态通常表示它处于 内核休眠 状态&#xff0c;即正在等待某些 I/O 操作或者资源。 不过&#xff0c;I 状态在进程列表中并不常见&#xff0c;它通常出现在 内核线程&#xff08;…

通过docker安装部署deepseek以及python实现

前提条件 Docker 安装:确保你的系统已经安装并正确配置了 Docker。可以通过运行 docker --version 来验证 Docker 是否安装成功。 网络环境:保证设备有稳定的网络连接,以便拉取 Docker 镜像和模型文件。 步骤一:拉取 Ollama Docker 镜像 Ollama 可以帮助我们更方便地管理…

python学opencv|读取图像(五十七)使用cv2.bilateralFilter()函数实现图像像素双边滤波处理

【1】引言 前序学习过程中&#xff0c;已经掌握了对图像的基本滤波操作技巧&#xff0c;具体的图像滤波方式包括均值滤波、中值滤波和高斯滤波&#xff0c;相关文章链接有&#xff1a; python学opencv|读取图像&#xff08;五十四&#xff09;使用cv2.blur()函数实现图像像素…

[c语言日寄]浮点数在内存中的储存

【作者主页】siy2333 【专栏介绍】⌈c语言日寄⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还是…

android 适配 api 35(android 15) 遇到的问题

首先升级 targetSdkVersion 和 compileSdkVersion 到 35&#xff0c;升级后发生的报错 一、 解决方案: 升级gradle 和gradle 插件版本 com.android.tools.build:gradle -> 8.3.0-alpha02 gradle-wrapper.properties : distributionUrl -> gradle-8.6-bin.zip https…

【LeetCode】5. 贪心算法:买卖股票时机

太久没更了&#xff0c;抽空学习下。 看一道简单题。 class Solution:def maxProfit(self, prices: List[int]) -> int:cost -1profit 0for i in prices:if cost -1:cost icontinueprofit_ i - costif profit_ > profit:profit profit_if cost > i:cost iret…

C#面试常考随笔12:游戏开发中常用的设计模式【C#面试题(中级篇)补充】

C#面试题&#xff08;中级篇&#xff09;&#xff0c;详细讲解&#xff0c;帮助你深刻理解&#xff0c;拒绝背话术&#xff01;-CSDN博客 简单工厂模式 优点&#xff1a; 根据条件有工厂类直接创建具体的产品 客户端无需知道具体的对象名字&#xff0c;可以通过配置文件创建…

基于Typescript,使用Vite构建融合Vue.js的Babylon.js开发环境

一、创建Vite项目 使用Vite初始化一个VueTypeScript项目&#xff1a; npm create vitelatest my-babylon-app -- --template vue-ts cd my-babylon-app npm create vitelatest my-babylon-app -- --template vue-ts 命令用于快速创建一个基于 Vite 的 Vue TypeScript 项目。…