ID3机器学习算法中统计熵概念的相关疑问

我正在研究ID3机器学习算法中使用的统计熵概念

对于由学习集S(即用于构建决策树的示例集)所示例化的领域,我需要对一个对象进行分类的平均信息量由熵测量给出

所以我有以下公式:

enter image description here

例如:

如果S是一组包含14个示例的集合,其中有9个YES和5个NO,那么我有:

Entropy(S) = – (9/14)*Log2(9/14) – (5/14)*Log2(5/14) = 0.940

这个计算相当简单,但我的问题是,在我的书中我还读到以下说明:

注意,如果S的所有成员都属于同一个类别(数据被完美分类),则熵为0。熵的范围是从0(“完美分类”)到1(“完全随机”)。

这个说法让我感到困惑,因为我试图以这种方式改变前面的例子:

如果S是一组包含14个示例的集合,其中有14个YES和0个NO,那么我有:

Entropy(S) = – (14/14)*Log2(14/14) – (0/14)*Log2(0/14) = 0 – 无穷大

所以,在这种情况下,所有的对象都属于同一个类别(YES),没有示例属于NO类别。

所以我期望这个S集的熵值为0,而不是-无穷大

我错过了什么?

谢谢

Andrea


回答:

在计算熵时,你需要通过迭代节点处唯一的分类值来进行求和。在每次迭代中,你计算集合中有多少成员具有该值,然后使用对数公式。在你的问题案例中,唯一出现的分类值是YES,这意味着基于单次迭代,熵为零。你无法对NO值进行迭代,因为没有示例具有该值。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注