Python Sci-Kit Learn : 多标签分类 ValueError: 无法将字符串转换为浮点数:

我正在尝试使用sci-kit learn 0.17进行多标签分类,我的数据看起来像这样

训练数据

Col1                  Col2asd dfgfg             [1,2,3]poioi oiopiop         [4]

测试数据

Col1                    asdas gwergwger    rgrgh hrhrh

到目前为止我的代码是

import numpy as npfrom sklearn import svm, datasetsfrom sklearn.metrics import precision_recall_curvefrom sklearn.metrics import average_precision_scorefrom sklearn.cross_validation import train_test_splitfrom sklearn.preprocessing import label_binarizefrom sklearn.multiclass import OneVsRestClassifierdef getLabels():    traindf = pickle.load(open("train.pkl","rb"))    X = traindf['Col1']    y = traindf['Col2']    # 将输出二值化    from sklearn.preprocessing import MultiLabelBinarizer      y=MultiLabelBinarizer().fit_transform(y)          random_state = np.random.RandomState(0)    # 分割成训练和测试数据    X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=.5,                                                        random_state=random_state)    # 运行分类器    from sklearn import svm, datasets    classifier = OneVsRestClassifier(svm.SVC(kernel='linear', probability=True,                                     random_state=random_state))    y_score = classifier.fit(X_train, y_train).decision_function(X_test)

但现在我得到了

ValueError: could not convert string to float: <value of Col1 here>

y_score = classifier.fit(X_train, y_train).decision_function(X_test) 

我是否也需要对X进行二值化处理?为什么我需要将X维度转换为浮点数?


回答:

是的,你必须将X也转换为数值表示(不一定是二进制的),就像y一样。这是因为所有机器学习方法都是在数字矩阵上操作的。

具体如何做呢?如果Col1中的每个样本可以包含不同的单词(即它代表一些文本),你可以使用CountVectorizer来转换该列

from sklearn.feature_extraction.text import CountVectorizercol1 = ["cherry banana", "apple appricote", "cherry apple", "banana apple appricote cherry apple"]cv = CountVectorizer()cv.fit_transform(col1) #<4x4 sparse matrix of type '<class 'numpy.int64'>'#   with 10 stored elements in Compressed Sparse Row format>cv.fit_transform(col1).toarray()#array([[0, 0, 1, 1],#       [1, 1, 0, 0],#       [1, 0, 0, 1],#       [2, 1, 1, 1]], dtype=int64)

Related Posts

L1-L2正则化的不同系数

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

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

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

f1_score metric in lightgbm

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

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

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

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

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

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

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

发表回复

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