如何处理超大矩阵?

我在使用监督学习进行主题检测。然而,我的矩阵尺寸非常大(202180 x 15000),无法适应我想要使用的模型。大部分矩阵元素都是零。只有逻辑回归能够工作。有没有办法让我继续使用相同的矩阵,但使它们能够与我想要的模型一起工作?比如,我可以以不同的方式创建我的矩阵吗?

这是我的代码:

import numpy as npimport subprocessfrom sklearn.linear_model import SGDClassifierfrom sklearn.linear_model import LogisticRegressionfrom sklearn import metricsdef run(command):    output = subprocess.check_output(command, shell=True)    return output

加载词汇表

 f = open('/Users/win/Documents/wholedata/RightVo.txt','r')    vocab_temp = f.read().split()    f.close()    col = len(vocab_temp)    print("训练列大小:")    print(col)

创建训练矩阵

row = run('cat '+'/Users/win/Documents/wholedata/X_tr.txt'+" | wc -l").split()[0]print("训练行大小:")print(row)matrix_tmp = np.zeros((int(row),col), dtype=np.int64)print("训练矩阵大小:")print(matrix_tmp.size)label_tmp = np.zeros((int(row)), dtype=np.int64)f = open('/Users/win/Documents/wholedata/X_tr.txt','r')count = 0for line in f:    line_tmp = line.split()    #print(line_tmp)    for word in line_tmp[0:]:        if word not in vocab_temp:            continue        matrix_tmp[count][vocab_temp.index(word)] = 1    count = count + 1f.close()print("训练矩阵是:\n ")print(matrix_tmp)print(label_tmp)print("训练标签大小:")print(len(label_tmp))f = open('/Users/win/Documents/wholedata/RightVo.txt','r')vocab_temp = f.read().split()f.close()col = len(vocab_temp)print("测试列大小:")print(col)

创建测试矩阵

row = run('cat '+'/Users/win/Documents/wholedata/X_te.txt'+" | wc -l").split()[0]print("测试行大小:")print(row)matrix_tmp_test = np.zeros((int(row),col), dtype=np.int64)print("测试矩阵大小:")print(matrix_tmp_test.size)label_tmp_test = np.zeros((int(row)), dtype=np.int64)f = open('/Users/win/Documents/wholedata/X_te.txt','r')count = 0for line in f:    line_tmp = line.split()    #print(line_tmp)    for word in line_tmp[0:]:        if word not in vocab_tmp:            continue        matrix_tmp_test[count][vocab_tmp.index(word)] = 1    count = count + 1f.close()print("测试矩阵是: \n")print(matrix_tmp_test)print(label_tmp_test)print("测试标签大小:")print(len(label_tmp_test))xtrain=[]with open("/Users/win/Documents/wholedata/Y_te.txt") as filer:    for line in filer:        xtrain.append(line.strip().split())xtrain= np.ravel(xtrain)label_tmp_test=xtrainytrain=[]with open("/Users/win/Documents/wholedata/Y_tr.txt") as filer:    for line in filer:        ytrain.append(line.strip().split())ytrain = np.ravel(ytrain)label_tmp=ytrain

加载监督模型

model = LogisticRegression()model = model.fit(matrix_tmp, label_tmp)#print(model)print("已进入1")y_train_pred = model.predict(matrix_tmp_test)print("已进入2")print(metrics.accuracy_score(label_tmp_test, y_train_pred))

回答:

你可以使用scipy包中提供的一种特殊数据结构,称为稀疏矩阵:http://docs.scipy.org/doc/scipy/reference/sparse.html

根据定义

稀疏矩阵只是一个包含大量零值的矩阵。相比之下,如果许多或大多数条目非零,则称该矩阵为密集矩阵。关于什么构成稀疏矩阵没有严格的规则,所以我们可以说,如果利用其稀疏性有某些好处,那么矩阵就是稀疏的。此外,还有多种稀疏矩阵格式,这些格式旨在利用不同的稀疏模式(稀疏矩阵中非零值的结构)和不同的方法来访问和操作矩阵条目。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注