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没有任何区别。@AliSVC
将为您将其转换为数组。但是,您可以通过不以这种方式存储输入数组来提高处理效率。@piRSquared假设x是图像的像素,y是类,有什么比我上面的方法更好的方法来存储此类数据?@Ali每个位都有单独的列?是的,这是我在评论中提到的另一种选择,但忽略了作为答案的解决方案+1尝试向用户解释其代码中的问题是什么,以及为什么您的解决方案会解决此问题。