为什么在无监督学习算法的训练和测试中不拆分数据?

时间:2019-07-17 13:38:07

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

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

如果我的数据有两列,那就说

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

具有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条记录中的其余部分来测试/验证上述模型,而不用其他某些数据(及其记录)进行测试。

因此可以在此处准确测量准确性。

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

评论

无监督学习

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

半监督学习

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

监督学习

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

问题

现在您提到的几件事似乎不正确:

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,其中年龄和salaray彼此为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进行很多操作来猜测,例如使用正态分布或仅显示最小/最大范围来猜测丢失的员工年龄。

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

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

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

答案 2 :(得分:0)

因为大多数非监督算法都是不是基于优化的。 (K均值是一个例外!)

示例:Apriori,DBSCAN,本地离群值因子。

如果您不进行优化,您将如何过度拟合? (而且,如果您不使用标签,则尤其不能过度适应这些标签。)