【问题标题】:Why are data not split in training and testing for unsupervised learning algorithms?为什么在无监督学习算法的训练和测试中没有拆分数据?
【发布时间】:2019-11-26 08:52:27
【问题描述】:

我们知道预测和分类问题可以根据训练比率(通常为 70-30 或 80-20 拆分)破坏数据,其中训练数据被传递给模型以进行拟合,并针对测试对其输出进行测试数据。

假设我有一个包含 2 列的数据:

  • 第一列:员工年龄
  • 第二栏:员工薪资类型

有 100 条类似的记录:

Employee Age   Employee Salary Type  

25               low
35               medium
26               low
37               medium
44               high
45               high

如果训练数据按 70:30 的比例拆分, 设目标变量为Employee Salary Type,预测变量为Employee Age

数据在 70 条记录上进行了训练,并针对剩余的 30 条记录进行了测试,同时隐藏了它们的目标变量。

假设 30 条记录中有 25 条预测准确。

Accuracy of the model = (25/30)*100 = 83.33%

这意味着模型很好

让我们将同样的事情应用到像聚类这样的无监督学习中。

这里没有目标变量,只有集群变量。

让我们将Employee ageEmployee Salary 都视为集群变量。

然后数据会根据自动聚类

Employees with low age and low salary 
Employees with medium age and medium salary 
Employees high age and high salary

如果在此处应用训练比率,我们可以对 70 条随机记录进行聚类,并使用剩余的 30 条记录来测试/验证上述模型,而不是使用其他一些数据(及其记录)进行测试。 这里我们需要对拟合 70% 的记录进行建模,然后再次对剩余 30% 的记录进行建模,因此我们需要比较 70% 数据的集群 1 的特征和剩余 30% 数据的集群 1 的特征。如果特征相似,那么我们可以得出聚类模型良好的推断。

因此在这里可以准确地测量精度。

为什么人们不喜欢训练/测试/拆分来进行无监督分析,如聚类、关联规则、预测等。

【问题讨论】:

  • 您在“为什么人们不喜欢...”中指的是哪些人?
  • 不是编程问题,因此这里可以说是题外话;更适合Cross Validated
  • 你听起来很困惑;在您的第二个示例中,甚至不存在准确性的概念(更不用说可测量了)

标签: machine-learning cluster-analysis unsupervised-learning


【解决方案1】:

我相信你有一些误解,这里是一个快速回顾:

评论

无监督学习

这是当您有数据输入但没有标签,并了解有关输入的信息时

半监督学习

这是当您有数据输入和相同的标签,并了解输入及其与标签的关系时

监督学习

这是当你有数据输入和标签,并了解什么输入映射到哪个标签

问题

现在你提到了一些看起来不正确的事情:

Then data will be automatically clustered according to

Employees with low age and low salary 
Employees with medium age and medium salary 
Employees high age and high salary

这只能保证如果您的特征使用年龄和薪水来表示员工,并且您使用的是聚类算法,则需要定义一个 distance metric,它表示年龄和薪水是彼此的 closer

你还提到:

If the Training ratio is applied here, 
We can cluster 70 random records and use rest of the 
30 records for testing/validating 
the above model instead of testing with 
some other data (and their records).

Hence accuracy can be accurately measured here.

你是怎么知道标签的?如果您是集群,您将不知道每个集群的含义意味着,因为它们仅由您的distance metric 分配。一个簇通常只表示距离是closerfarther

除非您知道一个集群代表某个标签,否则您永远无法知道什么是正确标签,但如果您使用特征进行集群和检查距离,它们也不能用于验证。

这是因为您将始终获得 100% 的准确度,因为特征也是标签。

半监督示例

我认为你的误解来自于你可能混淆了学习类型,所以让我们使用一些假数据来做一个例子。

假设您有一个包含Employee 条目的数据表,如下所示:

Employee
  Name
  Age
  Salary
  University degree
  University graduation date
  Address

现在假设一些员工不想说出他们的年龄,因为这不是强制性的,但有些人会。然后,您可以使用 半监督学习 方法对员工进行聚类并获取有关其年龄的信息。

既然要得到年龄,我们可以通过聚类来近似。

让我们制作代表Employee 年龄的特征来帮助我们将它们聚集在一起:

employee_vector = [salary, graduation, address]

根据我们的意见,我们声称年龄可以由salarygraduation dateaddress 确定,这可能是真的。

假设我们已经用数字表示了所有这些值,那么我们可以将项目聚集在一起。

使用标准距离度量 Euclidian distance 这些集群意味着什么?

工资、毕业日期和地址距离较近的人将聚集在一起。

然后我们可以查看它们所在的集群,并查看有关我们所知道的年龄的信息。

for cluster_id, employees in clusters:
    ages = get_known_ages(employees)

现在我们可以使用ages 进行大量操作以猜测丢失的员工年龄,例如使用正态分布或仅显示最小/最大范围。

我们永远无法知道确切的年龄,因为聚类不知道这一点。

我们永远无法测试年龄,因为它并不总是已知的,也没有用于员工的特征向量中。

这就是你不能使用纯无监督方法的原因,因为你没有标签。

【讨论】:

  • 嗨,Nathan McCoy,感谢您的回答。是否可以分别聚类 70% 的记录和聚类其余 30% 的记录。假设第一个集群有一个低薪和低年龄的员工,第二个集群有一个低薪和低年龄的员工,我们可以看到几乎 2 个集群给出了相同的推论。如果它们相互矛盾,我们可以假设模型中有问题正确的 ?这可以成为衡量无监督算法准确性的一种方式。
【解决方案2】:

我不知道您指的是“为什么人们不喜欢...”,但通常如果您进行无监督分析,您没有标签数据,因此您无法衡量准确性。在这种情况下,您可以使用轮廓或 L 曲线等方法来估计模型的性能。

另一方面,如果您有一个带有标签数据的监督任务(本示例),您可以通过交叉验证(测试训练拆分)计算准确度。

【讨论】:

    【解决方案3】:

    因为大多数无监督算法不是基于优化的。 (K-means 是个例外!)

    示例:Apriori、DBSCAN、局部异常值因子。

    如果你不优化,你将如何过拟合? (如果你不使用标签,你尤其不能过度拟合这些标签)。

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 2016-12-27
      • 2011-11-09
      • 2016-12-03
      • 2017-07-27
      • 1970-01-01
      • 2010-12-22
      • 2018-10-01
      • 2018-12-03
      相关资源
      最近更新 更多