sklearn中的分类(字符串)功能可用于10cv SVM回归

时间:2018-07-27 07:02:33

标签: python scikit-learn svm

我在一个csv文件中混合了不同类型的功能(分类字符串,0-1二进制文件,浮点数)。我想使用10倍交叉验证进行SVM回归。基于this post,我尝试了以下操作来读取数据,但是遇到一个错误,即无法将字符串转换为浮点型:

df = pd.read_csv("output.csv")
datanumpy = df.as_matrix()
x = datanumpy[:, 0:143]  # select columns 1 through 41 (the features)
y = datanumpy[:, 144]  # select column 42 (the labels)


clf = SVC(kernel='linear')

clf.fit(x, y)

您知道我如何处理这些因素吗?

错误消息是:

ValueError                                Traceback (most recent call last)
<ipython-input-22-731136d5a713> in <module>()
     75 
     76 # # fitting x samples and y classes
---> 77 clf.fit(x, y)
     78 
     79 

/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/svm/base.py in fit(self, X, y, sample_weight)
    149         self._sparse = sparse and not callable(self.kernel)
    150 
--> 151         X, y = check_X_y(X, y, dtype=np.float64, order='C', accept_sparse='csr')
    152         y = self._validate_targets(y)
    153 

/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/utils/validation.py in check_X_y(X, y, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, multi_output, ensure_min_samples, ensure_min_features, y_numeric, warn_on_dtype, estimator)
    519     X = check_array(X, accept_sparse, dtype, order, copy, force_all_finite,
    520                     ensure_2d, allow_nd, ensure_min_samples,
--> 521                     ensure_min_features, warn_on_dtype, estimator)
    522     if multi_output:
    523         y = check_array(y, 'csr', force_all_finite=True, ensure_2d=False,

/usr/local/Cellar/python3/3.6.0/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/utils/validation.py in check_array(array, accept_sparse, dtype, order, copy, force_all_finite, ensure_2d, allow_nd, ensure_min_samples, ensure_min_features, warn_on_dtype, estimator)
    380                                       force_all_finite)
    381     else:
--> 382         array = np.array(array, dtype=dtype, order=order, copy=copy)
    383 
    384         if ensure_2d:

ValueError: could not convert string to float: '/Users/dorien/AC/Projects/memory/S1 - Stimuli/Exp1-2-Stimuli/MIDI/Stimulus9.mid'

我应该指出哪些因素是因素吗?

2 个答案:

答案 0 :(得分:1)

由于机器学习算法仅接受数字数据,因此首先将文本数据转换为数字非常重要。 在python中,我们有两种实现方法。

第一个使用LabelEncoder()

from sklearn.preprocessing import LabelEncoder

df = df.apply(LabelEncoder().fit_transform)  

另一种方法是使用pandas.get_dummies()

import pandas as pd

df_dummies = pd.get_dummies(df, columns=categorical_columns, drop_first=True)

在上面的示例中,categorical_columns是分类变量的列表。

答案 1 :(得分:0)

SVM无法处理分类数据,您需要使用某种技术将其预处理为一种热编码(或任何适合您数据的编码)