我在一个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'
我应该指出哪些因素是因素吗?
答案 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无法处理分类数据,您需要使用某种技术将其预处理为一种热编码(或任何适合您数据的编码)