如何对矩阵(或数据集)进行分类

时间:2016-12-08 13:20:03

标签: python machine-learning classification bayesian naivebayes

鉴于分类问题,培训数据如下:

input - output
--------------
A       100
B       150
C       170
..............

其中A,B,C是大数据集,每个都有6个变量和大约5000行。

问题是:如何结束输入以使用分类算法来处理其他数据集输入。

我尝试将每一行附加训练分类器值并对其进行训练。对于新条目,每行将被分类,并且我将平均值(平均值)作为整个数据集的分类器。但是使用朴素贝叶斯并没有很好的结果。

我应该继续用其他分类器来研究这个方法吗?我可以研究哪些其他选择?

修改

来自2个事件的样本数据

    OUT Var1    Var2    Var3    Var4    Var5    Var6
0   93  209.2   49.4    5451.0  254.0   206.0   37.7
1       344.9   217.6   14590.5 191.7   175.5   106.8
2       663.3   97.2    17069.2 144.4   2.8     59.9
3       147.4   137.7   12367.4 194.1   237.7   116.2
4       231.8   162.2   11938.4 71.3    149.1   116.3

    OUT Var1    Var2    Var3    Var4    Var5    Var6
964 100 44.5    139.7   10702.5 151.4   36.0    17.9
966     59.8    148.9   3184.9  103.0   96.5    12.8
967     189.7   194.4   7569.6  49.9    82.6    55.2
969     158.5   88.2    2932.4  159.8   232.8   125.2
971     226.4   155.2   3156.3  85.0    4010.5  69.9

对于类似的数据集,我需要预测out值。我有很多像这样的样本。

将相同的值应用于所有行是否正确?

1 个答案:

答案 0 :(得分:1)

查看one-hot encoding。给定一个输入变量x,它有三个不同的类(通常称为"因子"),对于x的每个唯一值,您需要一个二进制编码的列您的数据集,以便机器学习算法理解它所处理的内容(即它能够了解为什么给定的类'A'对应于各种输出值)。

修改!!

另一个导入说明:您要查看的内容(即将某些功能映射到连续输出变量),称为&#34 ;分类&#34。这被称为"回归。"在您的情况下,如果您翻转数据并尝试根据inputs(您的连续整数)预测outputs(即A,B或C),则会出现分类问题。我将在下面展示如何在您的案例中进行回归。如果您按照自己描述的方式尝试分类,那么您将尝试预测len(set(df['outputs']))个不同类别的数量。分类不是您的方案中的方法。

以下是一个快速而肮脏的例子:

import random
from sklearn.linear_model import LogisticRegression
from sklearn.cross_validation import train_test_split
from sklearn.metrics import r2_score
import pandas as pd
import numpy as np

inputs = ['A', 'B', 'C']

# create some random data similar to yours
df = pd.DataFrame({'input': [random.choice(inputs) for _ in range(5000)], 'output': [int(abs(n) * 100) for n in np.random.randn(5000)]})

# one-hot-encode the categorical variable 'input' for use in classification
dummies = pd.get_dummies(df['input'])

# merge the one-hot-encoded dummies back with the original data
df = df.join(dummies)

# our feature  matrix (input values as dummies)
X = df[['A', 'B', 'C']]

# our outcome variable
y = df['output']

# split the dataset into train and test objects so we can gauge the accuracy of our classifier
X_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.80, random_state = 100)

# our model instance
model = LogisticRegression()

# train the classifier
model.fit(X_train, y_train)

# use trained model from above to predict the class of "new" data
predicted = model.predict(X_test)

# let's see how well the classifier performed
print(r2_score(y_test, predicted))

编辑2

要回答您编辑的问题,只要每个样本中的行来自同一个类,然后是,您应该将相同的值应用于示例中的每一行。第一次"活动"上面,如果所有行(索引0到4)都属于同一个类/组,那么您应该将93应用于示例中的所有行(类中的所有行)