我应该使用哪种类型的ML算法/模型进行预测?

时间:2019-12-01 07:18:26

标签: python tensorflow machine-learning

我很抱歉,这可能是一个很难回答的问题,我希望在正确的方向上展开更多的研究。

所以说我有大量的数组数据。病最容易举个例子:

[{a: 1}, {h: 3}, {r:7}, {p: 2}] 
[{y: 4}, {p: 3}, {w: -3}, {u: 54}]
[{l: -9}, {h: 5}, {r: 9}, {p: 5}]
[{o: -5}, {f: 4}, {i: 0}, {t: 1}]
[{a: 1}, {h: 2}, {r:5}, {p: 2}] 

好的,所以对象的键并不重要。我想要做的是通过说出哪个列表是“好”和哪个列表是“坏”来在这些对象上训练模型。根据上面的示例数据,如果第1,第3,第5列表为“好”,而第2和第4列表为“不好”,我希望模型能够识别出它们都具有相似的h,r,p, h,r,p是正值(或负数或某种形式的东西),并且它们在列表中的顺序相同。因此,例如,如果我将[{h: 2}, {a: 1}, {p: 2}, {r:5}]传递为错误,则可以将其按不同顺序分开。因此,基本上,我希望能够通过比较相似性来确定最有可能导致“好”列表的原因。

2 个答案:

答案 0 :(得分:1)

您需要的是一个“分类器”,该分类器将给定的输出分类为属于N个组或类之一-在您的情况下,有好和坏两个类。 sklearn模块具有很多“准备就绪”的分类器,它们仅需要标准格式的输入数据:Nxk输入的输入数组,其中N是示例(或行)的数量,k是您的要素的数量输入和长度为N的输出向量,其中包含训练数据的已知正确类。
在您的情况下,您需要首先将数据放入更适合分类的格式,您可以这样做:

import numpy as np
from sklearn.svm import SVC
from collections import Set

data=[[{'a': 1}, {'h': 3}, {'r':7}, {'p': 2}],
[{'y': 4}, {'p': 3}, {'w': -3}, {'u': 54}],
[{'l': -9}, {'h': 5}, {'r': 9}, {'p': 5}],
[{'o': -5}, {'f': 4}, {'i': 0}, {'t': 1}],
[{'a': 1}, {'h': 2}, {'r':5}, {'p': 2}] ]

all_keys = [ k for l in data   for d in l for k,v in d.items()  ]
all_keys=list(set(all_keys))
all_keys.sort()
data_np = np.zeros([len(data),len(all_keys)])
for i,l in enumerate(data):
    vec = np.zeros(len(all_keys))
    for d in l:
        for k,v in d.items():
            index = all_keys.index(k)
            vec[index]=v
    data_np[i]=vec

classes = np.array([0,1,0,1,0])

这将为您提供一组格式一致的输入向量(行),每个可能的字母(特征)带有一个“ slot”(列)。您还需要提供“答案”或我将其从“好”和“坏”转换为0和1的类,它们在变量“类”中。 现在您的数据状态良好(用于输入和输出的numpy数组),您可以尝试使用分类器。

SVC_model = SVC()    
SVC_model.fit(data_np, classes)

就是这样。您可以在工具箱中尝试其他任何分类器,其中有很多-神经网络,决策树,KNN,您都可以命名。 XGBoost现在非常流行。 我在数据的最后两行进行了测试:

test = np.array([ [ 0.,  4. , 0. , 0. , 0., -5.,  0.,  0.,  1.,  0.,  0. , 0.],[ 1.,  0.,  2.,  0.,  0. , 0.,  2.,5. , 0.,  0.,  0. , 0.]])
SVC_prediction = SVC_model.predict(test)
print(SVC_prediction)

并找到它正确地返回了给出的答案。如果您有更多数据,则可以将大部分数据作为训练数据,并将一些看不见的数据作为测试数据。有内置(from sklearn.model_selection import train_test_split)可以将您的数据分成这样的集合。

答案 1 :(得分:0)

作为分类问题,深度前馈神经网络可能会起作用,但是如果顺序很重要,则应使用递归神经网络。具体来说,如果您要对LSTM排序,那么LSTM似乎就是您想要的。

这类似于情感分析,在情感分析中,人类可读的句子被标记化,并被分类为不同的情感。类似的问题可能共享一个类似的解决方案。