2405_83704727 2024-03-26 11:17 采纳率: 0%
浏览 3

如何在Python中实现找到两个未知特征来从其余样本中聚类已知样本?

我有一个名为:的资料集synthetic_feature_file ,包含超过 50,000 个特​​征和 43 个样本。给定sample_indices = syn_data.index.isin([1, 6, 7, 11, 14, 15, 27]),它代表已知样本的索引,我想将它们与其余样本分开,并用与其他样本不同的颜色标记它们。已知样本和其他样本的数据不应重叠。有人可以提供一段程式码来处理这个问题吗?

另外,这是我之前写的程式码。由于它只执行随机处理,所以我想实作其他方法或其他方式来满足上一段所述的要求:


```python
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

syn_data = pd.read_csv(synthetic_feature_file)
sample_indices = syn_data.index.isin([1, 6, 7, 11, 14, 15, 27])
x_feature = np.random.choice(syn_data.columns[70:85])
y_feature = np.random.choice(syn_data.columns[30:60])

plt.figure(figsize=(8, 6))
other_samples = syn_data.iloc[~sample_indices]
plt.scatter(other_samples[x_feature], other_samples[y_feature], color='blue', label='Other Samples')
red_samples = syn_data.iloc[sample_indices]
plt.scatter(red_samples[x_feature], red_samples[y_feature], color='red', label='Sample Indices')

plt.xlabel(x_feature)
plt.ylabel(y_feature)
plt.title("Visualization")
plt.legend()
plt.show()

我希望它可以像这样:[link](https://drive.usercontent.google.com/download?id=1C8JK9FhejFjnGiPMABSyja2nOFr5UKEb&export=view&authuser=0)
图片来源:[Google](https://medium.com/ai-academy-taiwan/clustering-%E5%88%86%E7%BE%A4%E6%87%B6%E4%BA%BA%E5%8C%85-9c0bb861a3ba)

但是我的原始程式码每次运行时都会在生成的图像中产生分离不良的红色和蓝色样本簇。以下是每次运行程式码产生的图像:[link](https://drive.usercontent.google.com/download?id=18jhWNWkLCUoYPfM_z-hEASiUlffCSfdv&export=view&authuser=0)
[link](https://drive.usercontent.google.com/download?id=1udZUV_1IArARqIMZRTxDsUV3pNBehDsx&export=view&authuser=0)
因为是随机的,所以在想需要用什么算法能帮助我过滤不要的结果,或是哪位大大有更好的方式
  • 写回答

1条回答 默认 最新

  • 关注

    2405_83704727 上午好☀️☀️☀️️
    本答案参考ChatGPT-3.5

    解决这个问题,你可以尝试以下方法:

    1. 采用聚类算法进行样本分离:使用无监督学习中的聚类算法,如K-means、DBSCAN或层次聚类等,将所有样本根据特征进行聚类分析。然后,根据已知样本的索引,找到它们所处的簇,并将其与其他簇分开。

    2. 选择更有区分度的特征:为了使已知样本与其他样本在散点图上更加明显,可以根据特征的特殊性选择更加有区分度的特征。可以使用特征选择算法,如互信息、方差分析等,选择最佳的特征组合。你可以使用scikit-learn库中的特征选择模块来实现。

    3. 调整图形参数:除了修改特征选择以外,还可以调整散点图的参数来改善可视化效果。你可以修改点的大小、形状、颜色、透明度等参数,以及调整坐标轴的范围和刻度。

    下面是修改后的示例代码:

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    from sklearn.cluster import KMeans
    
    synthetic_feature_file = "path_to_synthetic_data.csv"  # 数据集文件路径
    
    syn_data = pd.read_csv(synthetic_feature_file)
    sample_indices = [1, 6, 7, 11, 14, 15, 27]  # 已知样本的索引
    
    # 选择最佳特征
    x_feature = "feature1"
    y_feature = "feature2"
    
    # 使用K-means进行聚类
    k = 2  # 聚类的簇数
    kmeans = KMeans(n_clusters=k)
    kmeans.fit(syn_data[[x_feature, y_feature]])
    
    # 获取已知样本所在的簇
    known_sample_labels = kmeans.labels_[sample_indices]
    
    # 绘制散点图
    plt.figure(figsize=(8, 6))
    
    # 绘制其他样本
    other_samples = syn_data.drop(sample_indices)
    plt.scatter(other_samples[x_feature], other_samples[y_feature], color='blue', label='Other Samples')
    
    # 绘制已知样本
    for label in np.unique(known_sample_labels):
        samples = syn_data[sample_indices][known_sample_labels == label]
        plt.scatter(samples[x_feature], samples[y_feature], color='red', label='Sample Cluster %d' % label)
    
    plt.xlabel(x_feature)
    plt.ylabel(y_feature)
    plt.title("Visualization")
    plt.legend()
    plt.show()
    

    请确保替换path_to_synthetic_data.csv为合适的文件路径,并根据你的数据集选择合适的特征。另外,将代码中的feature1feature2替换为你选择的特征列的名称。

    这种修改后的代码应该能够更好地将已知样本与其他样本分开,并提供更清晰的可视化结果。你可以根据需要进一步调整代码和图形参数,以达到最佳效果。

    评论

报告相同问题?

问题事件

  • 创建了问题 3月26日

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图