1

我想执行 SVM light 和 SVM rank,

所以我需要将我的数据处理成SVM light的格式。

但是我遇到了一个大问题......

我的 Python 代码如下:

import pandas as pd
import numpy as np
from sklearn.datasets import dump_svmlight_file

self.df = pd.DataFrame()
self.df['patent_id'] = patent_id_list
self.df['Target'] = class_list
self.df['backward_citation'] = backward_citation_list
self.df['uspc_originality'] = uspc_originality_list
self.df['science_linkage'] = science_linkage_list
self.df['sim_bc_structure'] = sim_bc_structure_list
self.df['claim_num'] = claim_num_list
self.qid = dataset_list

X = self.df[np.setdiff1d(self.df.columns, ['patent_id','Target'])]
y = self.df.Target

dump_svmlight_file(X,y,'test.dat',zero_based=False, query_id=self.qid,multilabel=False)

输出文件“test.dat”如下所示: 在此处输入图像描述

但真实数据是这样的: 在此处输入图像描述

我有一个错误的索引......

以第一个例子为例,第 1 列的值为 7,第 2~4 列的值为 0,第 5 列的值为 2....

所以我的预期结果是这样的:

1 qid:1 1:7 5:2

但是输出文件的列索引完全错误....

不幸的是......我无法弄清楚问题出在哪里......

好久没能解决这个问题了。。。。。

谢谢你的帮助!!

4

2 回答 2

2

我改变了数据结构,我使用 np.array 来产生类似数组的输入。终于,我成功了!

于 2016-04-01T12:28:11.627 回答
0

如果您有兴趣加载到 numpy 数组中,请尝试:

X = clicks_train[:,0:2]
y = clicks_train[:,2]

其中 2 是目标列的索引

于 2016-11-30T04:55:11.670 回答