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

给定一个分类问题,训练数据看起来如下所示:

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

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

问题是:如何包装输入,以便使用分类算法处理其他类似输入的数据集。

我尝试将每行的训练分类值附加到该行上,并以此方式进行训练。对于新条目,每行都会被分类,我会将平均值(平均值)作为整个数据集的分类器。但使用朴素贝叶斯时,结果并不理想。

我应该继续探索这种方法,使用其他分类器吗?我还能考虑哪些其他选项?

编辑

来自两个事件的样本数据

    OUT Var1    Var2    Var3    Var4    Var5    Var60   93  209.2   49.4    5451.0  254.0   206.0   37.71       344.9   217.6   14590.5 191.7   175.5   106.82       663.3   97.2    17069.2 144.4   2.8     59.93       147.4   137.7   12367.4 194.1   237.7   116.24       231.8   162.2   11938.4 71.3    149.1   116.3    OUT Var1    Var2    Var3    Var4    Var5    Var6964 100 44.5    139.7   10702.5 151.4   36.0    17.9966     59.8    148.9   3184.9  103.0   96.5    12.8967     189.7   194.4   7569.6  49.9    82.6    55.2969     158.5   88.2    2932.4  159.8   232.8   125.2971     226.4   155.2   3156.3  85.0    4010.5  69.9

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

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


回答:

探索独热编码。给定一个输入变量x,它有三个不同的类别(这通常被称为“因子”),对于x的每个唯一值,你需要在数据集中添加一个二进制编码的列,以便机器学习算法能够理解它在处理什么(即它将能够学习为什么给定的类'A'对应于各种输出值)。

编辑!!

另一个重要说明:你想要做的事情(即将一些特征映射到一个连续的输出变量上),并不被称为“分类”。这被称为“回归”。在你的情况下,如果你翻转数据并尝试根据你的outputs(你的连续整数)来预测inputs(即A、B或C),这将是一个分类问题。我将在下面展示如何在你的情况下进行回归。如果你按照你描述的方式尝试分类,你最终将会有len(set(df['outputs']))个不同的类要预测。在你的场景中,分类不是合适的方法。

以下是一个快速而粗略的示例:

import randomfrom sklearn.linear_model import LogisticRegressionfrom sklearn.cross_validation import train_test_splitfrom sklearn.metrics import r2_scoreimport pandas as pdimport numpy as npinputs = ['A', 'B', 'C']# create some random data similar to yoursdf = 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 classificationdummies = pd.get_dummies(df['input'])# merge the one-hot-encoded dummies back with the original datadf = df.join(dummies)# our feature  matrix (input values as dummies)X = df[['A', 'B', 'C']]# our outcome variabley = df['output']# split the dataset into train and test objects so we can gauge the accuracy of our classifierX_train, X_test, y_train, y_test = train_test_split(X, y, train_size = 0.80, random_state = 100)# our model instancemodel = LogisticRegression()# train the classifiermodel.fit(X_train, y_train)# use trained model from above to predict the class of "new" datapredicted = model.predict(X_test)# let's see how well the classifier performedprint(r2_score(y_test, predicted))

编辑2

为了回答你编辑后的问题,只要样本内的各行来自同一类,那么是的,你应该将相同的值应用到样本中的每一行。对于你上面的第一个“事件”,如果所有行(索引0到4)的类别/组相同,那么你应该将93应用到样本中的所有行(所有属于该类的行)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注