• 王彬成
    2019-02-24
    有一个疑惑,在数据规范化的时候,为何Z-Score进行规范化,而不是Min-Max进行规范化,虽然最后的结果是差不多的。
    请问在数据规范化时,何时用Z-Score进行规范化,何时是Min-Max
     1
     13
  • 哆哩咪fa👻
    2019-02-18
    才买的课,请问有vx群或者可以相互沟通的群么

    作者回复: 找运营加微信群

    
     10
  • iamtalent123
    2019-03-20
    老师,请问有没有什么方法在得到相关性系数后,自动筛选出不太相关的特征呢?在特征比较多的时候,自己一个一个的看是不是有点太费时了?
    
     5
  • Grandia_Z
    2019-02-18
    画热力图时 为什么没有“最大攻速”和“攻击范围”这两项
     1
     5
  • Frank
    2019-03-10
    老师,covariance_type这个参数,什么情况下选择什么类型,能不能再说的详细点儿呢?
    
     4
  • third
    2019-02-20
    思考:为什么分类越少,反而指标分数越高,分类效果越好?
    总样本过少,分成的类越多,每个类的所拥有的个体相对越少,类中个体差异变大,导致指标分数变低
    为3个
    [2 2 1 2 1 1 1 1 2 2 2 2 2 0 2 2 2 2 1 0 0 0 0 0 0 0 0 0 0 0 2 0 0 0 0 0 0
     0 0 0 0 0 0 0 0 0 2 0 2 0 1 0 1 0 0 2 2 0 0 1 2 1 1 2 1 0 0 0 0]
    34.74970397246901

    为30
    [ 1 20 5 13 26 15 14 5 8 20 16 20 13 0 22 16 19 22 26 10 6 4 10 4
      4 4 10 12 3 27 0 27 29 3 27 3 3 24 27 18 29 3 3 27 3 18 20 27
     20 3 21 11 2 23 23 1 28 11 25 26 28 2 17 1 9 11 11 7 12]
    24.220124542171177
    展开
    
     4
  • 許敲敲
    2019-02-19
    最后一个 data_to_csv()也最好加上encoding='gb18030';不然会乱码

    编辑回复: 嗯 中文的话需要需要注意这个。

    
     4
  • 高桥凉瓜
    2019-03-27
    之所以热力图不显示最大攻速和攻击范围,是因为这两列的数据的类型是string,想要在热力图也显示这两项的话可以在构建热力图前就进行数据清洗:
    ```
    data[u'最大攻速'] = data[u'最大攻速'].apply(lambda x: float(x.strip('%'))/100)
    data[u'攻击范围']=data[u'攻击范围'].map({'远程':1,'近战':0})
    ```

    作者回复: Good Job

    
     3
  • 从未在此
    2019-02-18
    问下老师,当几个特征相关性较大时,怎么选择最具有代表性的那个呢

    编辑回复: 相关性比较大的时候,可以任意选择其中一个,因为这些指标相关性比较大,所以你选择哪一个其实结果都相差不大。当然对于相关性比较大,不同人的理解是不同的额,比如你可以定义相关性大于0.9或者相关性大于0.8。

    
     3
  • 周飞
    2019-04-27
    1.不做特征选择的情况下,得到的Calinski_Harabaz 分数 大约是 23.1530273621 ,做特征选择的情况下 大约是:21.2142191471.
    2.聚类个数为3的时候 Calinski_Harabaz 分数 大约是 22.9119297953 。聚类个数为30的时候 Calinski_Harabaz 分数 大约是 21.2142191471

    作者回复: Good Job

    
     1
  • 白夜
    2019-02-18
    这个相关性的计算原理能扩展讲讲吗?蛮好奇的
    
     1
  • 从未在此
    2019-02-18
    还有,非数值型的特征怎么进行聚类?

    编辑回复: 非数值的类型需要先转化为数值类型,比如“远程”转化为1,“近战”转化为0。这样才能做矩阵的运算。

    
     1
  • groot888
    2020-01-22
    热力图展现出来,相关的分数大,是不是也可以当做一种聚类算法。
    
    
  • 挠头侠
    2019-05-14
    老师能否说明一下不同的协方差类型会带来一个什么样的效果呢?
    
    
  • 滢
    2019-04-20
    全部特征,聚类个数为3个:
    [0 0 2 0 2 2 2 2 0 0 0 0 0 0 0 0 0 0 2 1 1 1 1 1 1 1 1 1 1 1 0 1 1 1 1 1 1
     1 0 1 1 1 1 1 1 1 0 0 0 1 2 0 2 0 0 0 0 0 1 2 0 2 2 0 2 1 1 0 1]
    22.91192979526994
    全部特征:聚类个数为30个
    [16 12 11 13 2 2 19 11 3 12 15 12 13 8 24 15 25 13 21 27 26 7 27 7
      7 7 27 22 28 1 8 1 29 28 1 1 28 6 20 18 29 28 28 1 28 18 12 20
     12 28 17 14 21 4 4 16 0 12 23 21 0 5 9 16 10 14 14 16 22]
    22.211084900636873
    展开

    作者回复: Good Job

    
    
  • 滨滨
    2019-04-05
    为什么分类越少,反而指标分数越高,分类效果越好?
    总样本过少,分成的类越多,每个类的所拥有的个体相对越少,类中个体差异变大,导致指标分数变低
    
    
  • hlz-123
    2019-03-24
    老师,同一程序每次运行结果不一样,有时赵云和孙悟空聚在一类,有时赵云和兰陵王聚在一类,这种情况正常吗?

    作者回复: 也算是正常

    
    
  • 三硝基甲苯
    2019-03-16
    在同样30个类的时候,没有任何特征过滤的时候分数大概是23附近,若是每种最大 成长 最初这三个里面去掉成长的话分数大概是19-21左右,若是只保留最大那一项,则分数可以到44-46左右。


    聚类30个和聚类3个分数差距,3个的分数比30个高
    
    
  • mickey
    2019-03-01
    # -*- coding: utf-8 -*-
    import sys
    reload(sys)
    sys.setdefaultencoding('utf8')

    import pandas as pd
    import csv
    import matplotlib.pyplot as plt
    import seaborn as sns
    from sklearn.mixture import GaussianMixture
    from sklearn.preprocessing import StandardScaler

    # 数据加载,避免中文乱码问题
    data_ori = pd.read_csv('./heros.csv', encoding='gb18030')
    features = [u'最大生命', u'生命成长', u'初始生命', u'最大法力', u'法力成长', u'初始法力', u'最高物攻', u'物攻成长', u'初始物攻', u'最大物防', u'物防成长', u'初始物防',
                u'最大每5秒回血', u'每5秒回血成长', u'初始每5秒回血', u'最大每5秒回蓝', u'每5秒回蓝成长', u'初始每5秒回蓝', u'最大攻速', u'攻击范围']
    data = data_ori[features]

    # 对英雄属性之间的关系进行可视化分析
    # 设置 plt 正确显示中文
    plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
    plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
    # 用热力图呈现 features_mean 字段之间的相关性
    corr = data[features].corr()
    plt.figure(figsize=(14, 14))
    # annot=True 显示每个方格的数据
    sns.heatmap(corr, annot=True)
    plt.show()

    pd.set_option('mode.chained_assignment', None)
    data[u'最大攻速'] = data[u'最大攻速'].apply(lambda x: float(x.strip('%')) / 100)
    data[u'攻击范围'] = data[u'攻击范围'].map({u'远程': 1, u'近战': 0})

    # 采用 Z-Score 规范化数据,保证每个特征维度的数据均值为 0,方差为 1
    ss = StandardScaler()
    data = ss.fit_transform(data)

    #print(data)

    # 构造 GMM 聚类
    gmm = GaussianMixture(n_components=3, covariance_type='full')
    gmm.fit(data)
    # 训练数据
    prediction = gmm.predict(data)
    print(prediction)

    # 将分组结果输出到 CSV 文件中
    data_ori.insert(0, '分组', prediction)
    data_ori.to_csv('./hero_out2.csv', index=False, sep=',', encoding='utf-8')

    from sklearn.metrics import calinski_harabaz_score
    print(calinski_harabaz_score(data, prediction))

        分组 英雄 最大生命 生命成长 初始生命 ... 初始每5秒回蓝 最大攻速 攻击范围 主要定位 次要定位
    0 0 夏侯惇 7350 288.8 3307 ... 15 28.00% 近战 坦克 战士
    ...
    43 1 张良 5799 198.0 3027 ... 18 14.00% 远程 法师 NaN
    ...
    68 2 百里守约 5611 185.1 3019 ... 16 28.00% 远程 射手 刺客

    [69 rows x 24 columns]
    23.869655882044263
    展开

    作者回复: Good Job

    
    
  • mickey
    2019-03-01
    问题1:
    data[u'最大攻速'] = data[u'最大攻速'].apply(lambda x: float(x.strip('%')) / 100)
    会产生 SettingWithCopyWarning 警告
    解决方法:使用 pd.set_option('mode.chained_assignment', None) 屏蔽警告

    问题2:
    导出文件时,会报UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
    解决方法:
    设置编码 data_ori.to_csv('./hero_out.csv', index=False, sep=',', encoding='utf-8')
    展开
    
    
我们在线,来聊聊吧