Python 安装sklearn';基于数据帧的s-SVM分类器

Python 安装sklearn';基于数据帧的s-SVM分类器,python,pandas,numpy,dataframe,scikit-learn,Python,Pandas,Numpy,Dataframe,Scikit Learn,我正在尝试使用支持向量机,但当我使用熊猫数据帧时,我不知道如何拟合模型。如果我的数据如下所示: 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 如果

我正在尝试使用支持向量机,但当我使用熊猫数据帧时,我不知道如何拟合模型。如果我的数据如下所示:

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的正确方法是什么

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)

另一个解决方案是下面的代码

将熊猫作为pd导入
将numpy作为np导入
从sklearn.svm导入SVC
df=pd.DataFrame({“x”:['011','100','111'],“y”:[0,1,0]})
x=df.x.apply(λx:pd.系列(列表(x)))
x
#出[2]:
#    0  1  2
# 0  0  1  1
# 1  1  0  0
# 2  1  1  1
SVC().fit(x,df.y)
#出[3]:
#SVC(C=1.0,缓存大小=200,类权重=None,coef0=0.0,
#决策函数形状=无,度=3,gamma='auto',内核='rbf',
#最大值=1,概率=假,随机状态=无,收缩=真,
#tol=0.001,详细=False)
将numpy作为np导入
从sklearn.svm导入SVC
#将数据帧的列转换为数组
features=df['x'].to_numpy()
labels=df['y'].to_numpy()
#输入你的分类器
SVC().fit(特征、标签)

非常感谢,但我们可以使用numpy数组而不是list of list吗。因为当我们有一个大数据集时,numpy数组比列表快得多?@Ali sklearn非常棒。将列表或numpy数组传递给sklearn没有任何区别。@Ali
SVC
将为您将其转换为数组。但是,您可以通过不以这种方式存储输入数组来提高处理效率。@piRSquared假设x是图像的像素,y是类,有什么比我上面的方法更好的方法来存储此类数据?@Ali每个位都有单独的列?是的,这是我在评论中提到的另一种选择,但忽略了作为答案的解决方案+1尝试向用户解释其代码中的问题是什么,以及为什么您的解决方案会解决此问题。