无法在数据样本中找到模式

时间:2016-02-22 11:02:51

标签: java logic

我正在寻求逻辑方面的帮助,而不是寻求解决这个问题的技术。我正在用Java编写程序来使用分类数据(包括映射到感染/未感染/未知状态的温度和血压)并将给定的一组旅行者分类为 因此“感染”,“未感染”或“未知”。

输入: 输入包含一个字符串,其中包含由'#'分隔的两个部分。第一部分包含 由逗号分隔的任意数量的个体的分类数据。每个人的数据 包含空格分隔三个值,如下所示:

温度血压类别

第二部分包含多个旅行者的空间分隔温度和血压 用逗号分隔。

输出: 以逗号分隔的旅行者分类。

示例输入&输出

90 120 Infected,90 150 NotInfected,100 140 Infected,80 130 NotInfected#95 125,95 145,75 160   | Output:    Infected,Unknown,NotInfected
80 120 Infected,70 145 Infected,90 100 Infected,80 150 NotInfected,80 80 NotInfected,100 120 NotInfected#120 148,75 148,60 90 | Output: NotInfected,Unknown,Unknown

我接着通过将提供的字符串拆分为包含分类数据的子字符串和另一个包含输入数据集的字符串来解决此问题。

public static void main(String[] args) {
    String s="90 120 Infected, 90 150 NotInfected, 100 140 NotInfected, 80 130 NotInfected#95 125, 95 145, 75 160";
    String categories = s.split("#")[0];
    String inputs = s.split("#")[1];
    System.out.println(categories+"\n"+inputs);

    for (String input: inputs.split(",")){
      //iterate through categories and match against input 
    }

}

但我意识到我无法找到任何可以帮助我获得所需输出的模式,如上面的"示例"中所述。哪种类型的温度-BP导致感染类别?

1 个答案:

答案 0 :(得分:0)

因此,您的问题是从样本(训练数据)中学习分类器,然后将新病例(由解释变量,温度和血压描述)分类为三个类别之一。

学习分类器的方法有很多,但是首先,您应该了解一下,如果您的解释变量真正地解释了类(即是否有模式)。为此,我建议进行一个简单的检查:在两个维度(解释变量)上绘制训练数据,并为三个类别中的每个类别赋予不同的符号(例如字母N,I,U)。您将看到是否所有类都是随机混合的,或者相同的符号是否趋于聚集在一起。还是您能够画出足够好区分不同类别的线条?您不需要能够完美地分离类-有些分类错误只是生命的一部分-但您应该能够看到一些趋势。

如果存在明确的班级划分,则应该选择一个分类器进行学习。学习算法广泛可用,因此您无需自己编写代码。您可以尝试例如分类树(经典的c4.5学习算法)。或者,如果您的训练集足够大,则可以使用不需要任何学习阶段的K近邻分类器:您只需根据训练数据中K个最近邻对一个新案例进行分类即可(您可以计算欧几里德距离在温度和血压空间中的各个点之间,请从新的查询点中选择距离最短的K个点,然后在邻居中选择最常见的类。