在传递到SVM分类器之前,将字符串数据转换为float



我的数据集如下:

X_data = 
BankNum   |  ID | 
00987772  | AB123 | 
00987772  | AB123 |
00987772  | AB123 |
00987772  | ED245 |
00982123  | GH564 |

,另一个为:

y_data =
ID  | Labels
AB123 | High
ED245 | Low
GH564 | Low

我正在做以下操作:

from sklearn import svm
from sklearn import metrics
import numpy as np
clf = svm.SVC(gamma=0.001, C=100., probability=True)
X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size=0.20, random_state=42)
clf.fit(X_train, y_train)
predicted = clf.predict(X_test)

但是我想知道如何在进行clf.fit()之前将此X_data转换为浮动?在这种情况下,我可以使用DictVectorizer吗?如果是,那我该如何使用?

另外,我正在通过train_test_split传递X_datay_data,以找出预测准确性,但是它会正确拆分吗?就像从 y_data中获取ID中CC_8的正确Label

更新:

有人可以告诉我我是否正确执行以下操作?

new_df = pd.merge(df, df3, on="ID")
columns = ['BankNum', 'ID']
labels = new_df['Labels']
le = LabelEncoder()
labels = le.fit_transform(labels)
X_train, X_test, y_train, y_test = train_test_split(new_df[columns], labels, test_size=0.25, random_state=42)
X_train.fillna( 'NA', inplace = True )
X_test.fillna( 'NA', inplace = True )
x_cat_train = X_train.to_dict( orient = 'records' )
x_cat_test = X_test.to_dict( orient = 'records' )
vectorizer = DictVectorizer( sparse = False )
vec_x_cat_train = vectorizer.fit_transform( x_cat_train )
vec_x_cat_test = vectorizer.transform( x_cat_test )
x_train = vec_x_cat_train
x_test = vec_x_cat_test
clf = svm.SVC(gamma=0.001, C=100., probability=True)
clf.fit(x_train, y_train)

根据我们的评论中的建议,我的建议首先合并x_data和y_data数据集:

dataset = pd.merge(left=x_data, right=y_data, on='index')

您可以使用NP.Astype将Bankacount列转换为浮动:

dataset['Bank_Num'] = dataset.Bank_Num.astype(np.float128)

nb(update):标签_encoder也可以适用于bank_num,如果它包含一些普通字符串值:

dataset['Bank_Num'] = le.fit_transform(dataset.Bank_Num)

通过使用标签编码器获取其INT表示的ID列:

from sklearn.preprocessing import LabelEncoder,LabelBinarizer
le = LabelEncoder()
dataset['index'] = le.fit_transform(dataset.index)

和y标签通过使用LabelBinarizer:

lb = LabelBinarizer()
dataset['label'] = lb.fit_transform(dataset.label)

现在,您有一个带有int和float的完整数据集,而您的SVC可以很好地使用,但是在需要拆分之前:

的测试尺寸低于火车尺寸,这是一个好主意,最好将值低于0.5进行testrongize 查找有关训练集和测试集大小的更多信息。/p>

这样:

X_train, X_test, y_train, y_test = train_test_split(dataset[['index','Bank_Num']], dataset.label, test_size=0.25, random_state=42)

使用此问题,您可以培训分类器任何问题:

clf.fit(X_train, y_train)

nb:在我的代码中,索引等效于您的ID

让我知道这是否有帮助,以及如何改善答案

最新更新