完整的Python脚本,用于加载libSVM数据文件的下载的txt文件

时间:2019-07-14 23:19:02

标签: dataset svm smo svmlight

我最近试图在python中的一些libSVM数据集上测试一些代码,并且意识到这样做比我最初估计的要困难得多。我首先尝试实际上只是将libSVM酿造到我的Mac上,但后来发现我无法直接访问任何数据集。由于我的工作空间需要与brew安装目录相同,因此我也无法访问该库。然后,我手动下载了文件并将其格式化为.pkl文件,以进行快速加载,但是现在遇到了一个问题,即加载后的前10个数据集在提供的培训和测试数据中具有不同数量的功能。

我在这里关注文档:https://www.csie.ntu.edu.tw/~cjlin/libsvm/ 但是,它对于解决上述问题并不是很有帮助。我知道有很多关于这个确切问题的文章,但是似乎没有一个人解决访问,格式化然后训练这些数据集的简单方法。

这里是我用来加载,格式化和训练这些数据的三个函数。


# convert the .txt file to .pkl files with load_svmlight_file
fname = 'data_sets_pkl/data_set_' + str(i) + '/a' + str(i) + 'a_train'
    f = '/Users/me/Desktop/project/python/data_sets_txt/data_set_' + str(i) + '/a' + str(i) + 'a.txt'
    data = datasets.load_svmlight_file(f)
    pickle.dump(data, open( fname + '.pkl', "wb" ) )
    fname = 'data_sets_pkl/data_set_' + str(i) + '/a' + str(i) + 'a_test'
    f = '/Users/me/Desktop/project/python/data_sets_txt/data_set_' + str(i) + '/a' + str(i) + 'a.t.txt'
    data = datasets.load_svmlight_file(f)
    pickle.dump(data, open( fname + '.pkl', "wb" ) )

# Function for loading pickled datasets
def load_sparse_data(data_dir, data_name):

    # real data
    data = pickle.load(open(data_dir + data_name +'.pkl', 'rb'), encoding = "latin1")

    # load real dataset; it's stored as a sparse matrix so you need to cast to a np array.
    A = data[0].toarray()

    # check if the targets are stored as a sparse matrix
    if isinstance(data[1], scipy.sparse.csr.csr_matrix):
        y = data[1].toarray().ravel()
    else:
        y = data[1]

    # for binary data only: use {-1,1} targets
    y[(np.where(y == np.unique(y)[0]))[0].tolist()] = -1
    y[(np.where(y == np.unique(y)[1]))[0].tolist()] = 1

    return A, y

# now get the data sets as lists 
X, y = load_sparse_data(data_dir, 'a1a_train')
X_test, y_test = load_sparse_data(data_dir, 'a1a_test')

我想正确地加载这些数据集并实际使用它们,但是当我加载它们时,我发现X和X测试数据集没有相同数量的特征。这可能是因为我不得不将其中一个数据集手动粘贴到文本文件(a1a.train)中,而另一个是直接下载链接(a1a.test)。同样,如果有一种更自动化的方法可以完全解释,那也将是一件很棒的事情,因为手动进行非常痛苦。鉴于这是一个被高度引用的数据集,我希望整个过程可以更加简化,例如将虹膜数据集从sklearn库中加载出来。

0 个答案:

没有答案