分享

Spark 高级分析:第五章第9,10节 分类变量,使用标签和熵

feilong 2018-5-4 07:24:45 发表于 连载型 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 0 4275
问题导读

1.什么是分类变量?
2.什么是熵

3.文中使用熵做何种操作?







上一篇:Spark 高级分析:第五章第8节 特征归一化
http://www.aboutyun.com/forum.php?mod=viewthread&tid=24384&extra=


之前,排除了三种分类特征,因为非数值特性不能与K-means在MLlib中使用的Euclidean距离函数一起使用。这在某种意义上与前面章节中提到的问题相反,在前面的章节中,数字特征被用来表示类别的值,但是我们需要一个类别特征。

分类特性可以使用onehot编码转换成几个二进制指示器特性,可以将其视为数字维度。例如,第二列包含协议类型:tcp、udp或icmp。这个特性可以被认为是三个特性,可能是is_tcp、is_udp和is_icmp。单一特征值tcp可能会变成1,0,0,udp可能是0,1,0等等。附带的源代码实现了这个转换,用一个热编码来替换这些类别值;这里没有复制。

这个新的更大的数据集可以再次标准化,并再次聚集,或者尝试更大的k。由于单个集群作业越来越大,所以最好将.par移除,然后一次返回计算一个模型。
[mw_shl_code=scala,true](80,0.038867919526032156)
(90,0.03633130732772693)
(100,0.025534431488492226)
(110,0.02349979741110366)
(120,0.01579211360618129)
(130,0.011155491535441237)
(140,0.010273258258627196)
(150,0.008779632525837223)
(160,0.009000858639068911)[/mw_shl_code]
这些样本结果表明k = 150,尽管运行了将近10次,在这个体量,k = 160也不能产生更好的聚类。这些分数还有一些不确定性。

前面,我们使用给定的标签为每个数据点创建一个快速的集群质量检查。这一概念可以进一步形式化,并作为评价聚类质量、选择k值的一种替代方法。

很显然,一个好的集群会创建包含一个或几个已知攻击类型的簇,而没有其他任何类型的簇。你可以回想一下上一章,我们有同质性的指标:基尼系数和熵。这里用熵来说明。

一个好的聚类会有一个簇,它的标签集合是同质的,所以有低的熵。因此,加权平均熵可以作为一个簇得分:
[mw_shl_code=scala,true]def entropy(counts: Iterable[Int]) = {
val values = counts.filter(_ > 0)
val n: Double = values.sum
values.map { v =>
val p = v / n
-p * math.log(p)
}.sum
}
def clusteringScore(
normalizedLabelsAndData: RDD[(String,Vector)],
k: Int) = {
...
val model = kmeans.run(normalizedLabelsAndData.values)
val labelsAndClusters =
normalizedLabelsAndData.mapValues(model.predict)
val clustersAndLabels = labelsAndClusters.map(_.swap)
val labelsInCluster = clustersAndLabels.groupByKey().values
val labelCounts = labelsInCluster.map(
_.groupBy(l => l).map(_._2.size))
val n = normalizedLabelsAndData.count()
labelCounts.map(m => m.sum * entropy(m)).sum / n
}[/mw_shl_code]
和以前一样,这个分析可以用来获得一个合适的k值的概念。随着k的增加,熵不一定会减少,所以可以寻找一个局部最小值。同样,结果表明k = 150是一个合理的选择。
[mw_shl_code=scala,true](80,1.0079370754411006)
(90,0.9637681417493124)
(100,0.9403615199645968)
(110,0.4731764778562114)
(120,0.37056636906883805)
(130,0.36584249542565717)
(140,0.10532529463749402)
(150,0.10380319762303959)
(160,0.14469129892579444)[/mw_shl_code]

本帖被以下淘专辑推荐:

没找到任何评论,期待你打破沉寂

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条