我正在尝试使用SVM,但是当我使用pandas数据框时,我不知道如何适应模型。如果我的数据如下所示:
df = pd.DataFrame({"x": ['011', '100', '111'] , "y": [0,1,0]})
df.x.apply(lambda x: np.array(list(map(int,x))))
>>>df
x y
0 [0, 1, 1] 0
1 [1, 0, 0] 1
2 [1, 1, 1] 0
如果我试图以这种方式拟合模型:
clf = svm.SVC().fit(df.x, df.y)
我收到此错误:
ValueError: setting an array element with a sequence.
使用此数据框适合SVM的正确方法是什么?
答案 0 :(得分:5)
df = pd.DataFrame({"x": ['011', '100', '111'] , "y": [0,1,0]})
df.x = df.x.apply(lambda x: list(map(int,x)))
df
x y
0 [0, 1, 1] 0
1 [1, 0, 0] 1
2 [1, 1, 1] 0
df.x
是一列数组。这可能不是存储数据的最佳方式,看起来sklearn
并不是非常擅长理解数据。将所有内容转换为列表列表并将 传递给SVC
会更简单。试试这个:
x = df.x.tolist()
print(x)
[[0, 1, 1], [1, 0, 0], [1, 1, 1]]
SVC().fit(x, df.y)
答案 1 :(得分:2)
另一个解决方案是下面的代码。
import pandas as pd
import numpy as np
from sklearn.svm import SVC
df = pd.DataFrame({"x": ['011', '100', '111'] , "y": [0,1,0]})
x = df.x.apply(lambda x: pd.Series(list(x)))
x
# Out[2]:
# 0 1 2
# 0 0 1 1
# 1 1 0 0
# 2 1 1 1
SVC().fit(x, df.y)
# Out[3]:
# SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,
# decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',
# max_iter=-1, probability=False, random_state=None, shrinking=True,
# tol=0.001, verbose=False)
答案 2 :(得分:0)
import numpy as np
from sklearn.svm import SVC
# Convert your data frame's columns into arrays
features = df['x'].to_numpy()
labels = df['y'].to_numpy()
# feed into your classifier
SVC().fit(features,labels)