【问题标题】:Understanding problems in scikit learn in Python理解 scikit 中的问题 learn in Python
【发布时间】:2020-04-04 04:14:05
【问题描述】:

以下是Youtuber Sentdex的机器学习代码,有些部分看不懂。


import numpy as np
from sklearn.cluster import MeanShift, KMeans
from sklearn import preprocessing, model_selection
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_excel('titanic.xls')
original_df = pd.DataFrame.copy(df)
df.drop(['body', 'name'], 1, inplace=True)
df.fillna(0, inplace=True)


def handle_non_numerical_data(df):
    columns = df.columns.values

    for column in columns:
        text_digit_vals = {}

        def convert_to_int(val):
            return text_digit_vals[val]

        if df[column].dtype != np.int64 and df[column].dtype != np.float64:

            column_contents = df[column].values.tolist()
            unique_elements = set(column_contents)
            x = 0
            for unique in unique_elements:
                if unique not in text_digit_vals:
                    # creating dict that contains new
                    # id per unique string
                    text_digit_vals[unique] = x
                    x += 1
            df[column] = list(map(convert_to_int, df[column]))
    return df


df = handle_non_numerical_data(df)
df.drop(['ticket', 'home.dest'], 1, inplace=True)

X = np.array(df.drop(['survived'], 1).astype(float))
X = preprocessing.scale(X)
y = np.array(df['survived'])

clf = MeanShift()
clf.fit(X)

labels= clf.labels_                          ###Can't understand###
cluster_centers = clf.cluster_centers_
original_df['cluster_group'] = np.nan

for i in range(len(X)):
    original_df['cluster_group'].iloc[i] = labels[i]
n_clusters_ = len(np.unique(labels))
survival_rates = {}
for i in range(n_clusters_):
    temp_df = original_df[(original_df['cluster_group'] == float(i))]
    # print(temp_df.head())

    survival_cluster = temp_df[(temp_df['survived'] == 1)]

    survival_rate = len(survival_cluster) / len(temp_df)
    # print(i,survival_rate)
    survival_rates[i] = survival_rate

print(survival_rates)

假设在“labels = clf.labels_”中,标签是 [0 : 5](当我运行程序并得到这些数字时)。但问题来了。这些数字是从哪里来的?为什么是0,1,2?为什么不是更大的数字?

【问题讨论】:

    标签: python pandas numpy dataframe scikit-learn


    【解决方案1】:

    scikitlearn 的 documentation on Meanshift 提供了对您似乎感到困惑的 labels_ 属性的解释。直接取自文档

    labels_ :
        Labels of each point.
    

    如果您对这些标签所代表的含义更加困惑,可以简单解释一下,数字是指该特定点聚集到哪个 bin。所以所有值为 0 的点都属于同一个簇,所有值为 1 的点都属于同一个簇,以此类推。这些标签的价值并不重要,它们只是为了能够识别数据点属于哪个集群。

    如果您仍然对为什么要标记数据感到困惑,我建议您阅读有关聚类的更多信息。

    【讨论】:

      猜你喜欢
      • 2019-02-03
      • 2019-11-22
      • 2019-06-08
      • 2017-04-26
      • 2013-10-02
      • 1970-01-01
      • 2013-01-06
      • 2017-08-05
      • 1970-01-01
      相关资源
      最近更新 更多