【问题标题】:Problems to use Array in K-means在 K-means 中使用数组的问题
【发布时间】:2020-02-08 23:28:58
【问题描述】:

请帮忙,我正在运行下面的代码来执行列的 onehotencoder,然后我想将此列传递给我的数据集,然后运行 ​​K-means,但是当我传递信息时,我正在使用tolist(), 为了适应列,在运行 K-means 时出现以下问题: ValueError: setting an array element with a sequence。我搜索了一下,但没有找到明确的解决方案......

我使用 45 列,起初我放入一个 Dataframe,但如果我有办法放入一个数组,每一列都会更有趣。

from sklearn.preprocessing import OneHotEncoder
encoder = OneHotEncoder(sparse=True)
SP_results_one_hot0 = encoder.fit_transform(SP_results_Array[:,0].reshape(-1,1))
SP_results_one_hot1 = encoder.fit_transform(SP_results_Array[:,1].reshape(-1,1))
SP_results_one_hot2 = encoder.fit_transform(SP_results_Array[:,2].reshape(-1,1))
SP_results_one_hot3 = encoder.fit_transform(SP_results_Array[:,3].reshape(-1,1))
SP_results_one_hot4 = encoder.fit_transform(SP_results_Array[:,4].reshape(-1,1))
SP_results_one_hot5 = encoder.fit_transform(SP_results_Array[:,5].reshape(-1,1))
SP_results_one_hot6 = encoder.fit_transform(SP_results_Array[:,6].reshape(-1,1))
SP_results_one_hot7 = encoder.fit_transform(SP_results_Array[:,7].reshape(-1,1))
SP_results_one_hot8 = encoder.fit_transform(SP_results_Array[:,8].reshape(-1,1))
SP_results_one_hot9 = encoder.fit_transform(SP_results_Array[:,9].reshape(-1,1))



SP_results["Division Vendedor"] = SP_results_one_hot0.toarray().tolist()
SP_results["Tiempo en la Empresa"] = SP_results_one_hot1.toarray().tolist()
SP_results["Id Supervisor"] = SP_results_one_hot2.toarray().tolist()
SP_results["ID Region"] = SP_results_one_hot3.toarray().tolist()
SP_results["cargo"] = SP_results_one_hot4.toarray().tolist()
SP_results["address"] = SP_results_one_hot5.toarray().tolist()
SP_results["Idad"] = SP_results_one_hot6.toarray().tolist()
SP_results["sexo"] = SP_results_one_hot7.toarray().tolist()
SP_results["Nacion"] = SP_results_one_hot8.toarray().tolist()
SP_results["Tipo de vendedor"] = SP_results_one_hot9.toarray().tolist()


features =SP_results

from sklearn.cluster import KMeans

    km = KMeans(n_clusters=i)
    clusters = km.fit(features)


ValueError: setting an array element with a sequence.

【问题讨论】:

    标签: python machine-learning data-science k-means


    【解决方案1】:

    您可以使用get_dummies 并定义columns 列表,而不是单独处理每个column。它会照顾它。以下是示例:

    import pandas as pd
    col_list = ["A","B","C"]
    # data is pandas dataframe
    data_new = pd.get_dummies(data, col_list)
    

    因为kmean 需要input 格式为array。你可以这样做。

    km = KMeans(n_clusters=i)
    # data_new.values will convert the dataframe to array
    clusters = km.fit(data_new.values)
    

    希望对您有所帮助。

    参考:

    1. pandas.get_dummies

    2. kmean

    【讨论】:

    • 完美!谢谢你。您知道单独使用列进行 K 均值分析是否正确?前任。 Jo 类型 1,2,3,我使用 3 个二进制列在数据集中表示它以用于 K-mean。
    • 是的,你可以这样做。小心分类变量。因为 kmean 适用于数值数据。有很多方法可以处理这个问题。以下链接可能对您有所帮助。 datascience.stackexchange.com/questions/22/…
    • 这正是我想要的,tks!
    猜你喜欢
    • 2018-04-05
    • 2016-02-25
    • 2019-11-18
    • 2011-07-27
    • 2021-01-04
    • 2018-12-26
    • 2011-06-10
    • 2021-09-14
    • 1970-01-01
    相关资源
    最近更新 更多