我需要编写一个程序,能够根据对象的某些属性对其进行分类。通过使用已知属性的一系列已知对象进行训练,程序应该能够对新对象进行分类。
例如,我有一个对象A
,其属性为:a=10
和b=1
。我还训练了程序,使其知道a
的值在5..15
之间,b
的值在0..2
之间时,该对象会被分类为label1
。
随着程序的发展,我需要用已知数据进一步训练它,以便属性区间变得更加精确(从而提高分类准确性)。
我之前没有机器学习或相关领域的经验,我想知道我应该如何开始。我看过很多教程,但都是关于文本分类的,而且只涉及二元分类(即,积极或消极,是或否……只有两个选项)。我将从5-6个标签开始,并且它们的数量很快会增加。此外,对象的属性是整数。
任何建议都非常受欢迎!
回答:
机器学习是一个非常广泛的领域,因此第一步是明确你所寻找的,并熟悉你试图解决的子问题。
根据你的描述,你试图在监督学习方法中解决一个分类问题。
我将从这里稍作改述:
分类问题在于识别一个观察属于哪个类别。
监督学习是一种“教”机器的方法。基本上,通过示例来训练算法(即:这个特定对象属于类X)。训练后,机器应该能够将其获得的知识应用于新数据。
k-NN算法是解决这类问题的最简单算法之一。我建议你熟悉它。
你可以在scipy中找到k-NN的实现。这里有一个使用它的教程链接。
现在,回答你的具体问题:
只涉及二元分类(即,积极或消极,是或否……只有两个选项)
k-NN可以处理任何(有限的)类别数量,所以你没问题
此外,对象的属性是整数
K-NN通常使用连续空间——所以你需要将它们转换为浮点数。
将属性值映射到算法空间中的点并不是一个简单的问题(参见数据预处理,特别是关于归一化、特征提取和选择的文章)