ML分类:编码分类数据

我是这个领域的初学者,

我有一个分类问题,我的数据如下所示:

enter image description here等等…

结果列是依赖变量。数据中没有任何有序的部分。(名称列有36个不同的名字。)

由于这是分类数据,我尝试了OneHotEncoding,但得到了ValueError: Number of features of the model must match the input

我理解了这个问题并参考了这个:StackOverflow问题,问题得到了解决。

还有另一个网站:Medium,通过使用Pandas的factorize函数来解决这个ValueError问题。

我的问题是:

  1. 正确的处理方法是什么?我应该先factorize然后再应用OneHotEncoding吗?
  2. 还是因为我的数据不是有序的,我不应该使用factorize
  3. 我总是得到100%的准确率。这是由于我做的编码造成的吗?

我的代码如下:

训练

# -*- coding: utf-8 -*-import numpy as npimport pandas as pddataset = pd.read_csv("model_data.csv")dataset['Col1'] = pd.factorize(dataset['Col1'])[0]dataset['Col2'] = pd.factorize(dataset['Col2'])[0]dataset['name'] = pd.factorize(dataset['name'])[0]dataset['ID'] = pd.factorize(dataset['ID'])[0]X = dataset.iloc[:, 0:-1].valuesy = dataset.iloc[:, -1].values# Encoding# Encoding categorical data# Encoding the Independent Variablefrom sklearn.compose import make_column_transformerfrom sklearn.preprocessing import OneHotEncoderct = make_column_transformer((OneHotEncoder(sparse='False'), [0,1,2,3]),  remainder = 'passthrough')X = ct.fit_transform(X)# Encoding the Dependent Variablefrom sklearn.preprocessing import LabelEncoderle = LabelEncoder()y = le.fit_transform(y)print(y)#from sklearn.model_selection import train_test_splitX_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.20, random_state = 0)from sklearn.ensemble import RandomForestClassifierclassifier = RandomForestClassifier(n_estimators = 5, criterion = 'entropy', max_depth = 5, random_state = 0)classifier.fit(X_train, y_train)# Predicting the Test set resultsy_pred = classifier.predict(X_test)

测试

test_data_set =  pd.read_csv("test_data.csv")test_data_set['Col1'] = pd.factorize(test_data_set['Col1'])[0]test_data_set['Col2'] = pd.factorize(test_data_set['Col2'])[0]test_data_set['name'] = pd.factorize(test_data_set['name'])[0]test_data_set['ID'] = pd.factorize(test_data_set['ID'])[0]X_test_data = test_data_set.iloc[:, 0:-1].valuesy_test_data = test_data_set.iloc[:, -1].valuesy_test_data = le.transform(y_test_data)classifier.fit(X_test_data, y_test_data) #fixes ValueErrory_test_pred = classifier.predict(X_test_data)from sklearn.metrics import confusion_matrix, accuracy_scorecm = confusion_matrix(y_test_data, y_test_pred)print(cm)print(accuracy_score(y_test_data, y_test_pred))

编辑

  • 我的数据集中有2000行。
  • 结果accuracy_score是1.0

混淆矩阵

[[113   0] [  0  30]] 

我不确定我有大约2000行,但我的TP和TN加起来只有143个计数。


回答:

这里是一个如何对你的数据使用OneHotEncoding来进行二元分类的例子。

你首先对所有特征列使用one-hot-encoding,然后将“Result”列中的Y/N类别转换为1/0视图。

dataset = pd.read_csv("model_data.csv")dataset = pd.get_dummies(dataset , columns=['Col1', 'Col2', 'name', 'ID'])dataset.Result = pd.factorize(dataset.Result)[0]

你应该会在你的结果数据框中得到如下的结果,你可以用它来进行训练/测试步骤。

初始数据框:

  Col1 Col2     name    ID Result0   AB    A     John -2500      N1   AB    A     John -2500      N2    A    A     John -2500      N3    A    A    Jacob -2500      Y4    A    A  Micheal -2500      Y5    A   AB     John -2500      N6    A    A  Sheldon -2500      Y7   AB   AB  Sheldon -2500      N8   AB   AB    Jacob -2500      Y

结果数据框:

   Result  Col1_A  Col1_AB  Col2_A  Col2_AB  name_Jacob  name_John  name_Micheal  name_Sheldon  ID_-25000       0       0        1       1        0           0          1             0             0         11       0       0        1       1        0           0          1             0             0         12       0       1        0       1        0           0          1             0             0         13       1       1        0       1        0           1          0             0             0         14       1       1        0       1        0           0          0             1             0         15       0       1        0       0        1           0          1             0             0         16       1       1        0       1        0           0          0             0             1         17       0       0        1       0        1           0          0             0             1         18       1       0        1       0        1           1          0             0             0         1

希望这对你有帮助。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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