2016-01-16 8 views
5

Ich führe Themenerkennung mit überwachtem Lernen durch. Meine Matrizen sind jedoch sehr groß (202180 x 15000) und ich kann sie nicht in die Modelle einfügen, die ich möchte. Der größte Teil der Matrix besteht aus Nullen. Nur die logistische Regression funktioniert. Gibt es eine Möglichkeit, mit der gleichen Matrix weiter zu arbeiten, aber mit den gewünschten Modellen arbeiten zu können? Wie kann ich meine Matrizen anders erstellen?Wie kann ich mit großen Matrizen umgehen?

ist hier mein Code:

import numpy as np 
import subprocess 
from sklearn.linear_model import SGDClassifier 
from sklearn.linear_model import LogisticRegression 

from sklearn import metrics 

def run(command): 
    output = subprocess.check_output(command, shell=True) 
    return output 

laden Vocabulary

f = open('/Users/win/Documents/wholedata/RightVo.txt','r') 
    vocab_temp = f.read().split() 
    f.close() 
    col = len(vocab_temp) 
    print("Training column size:") 
    print(col) 

erstellen Zug Matrix

row = run('cat '+'/Users/win/Documents/wholedata/X_tr.txt'+" | wc -l").split()[0] 
print("Training row size:") 
print(row) 
matrix_tmp = np.zeros((int(row),col), dtype=np.int64) 
print("Train Matrix size:") 
print(matrix_tmp.size) 

label_tmp = np.zeros((int(row)), dtype=np.int64) 
f = open('/Users/win/Documents/wholedata/X_tr.txt','r') 
count = 0 
for 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 + 1 
f.close() 
print("Train matrix is:\n ") 
print(matrix_tmp) 
print(label_tmp) 
print("Train Label size:") 
print(len(label_tmp)) 

f = open('/Users/win/Documents/wholedata/RightVo.txt','r') 
vocab_tmp = f.read().split() 
f.close() 
col = len(vocab_tmp) 
print("Test column size:") 
print(col) 

Make Testmatrix

row = run('cat '+'/Users/win/Documents/wholedata/X_te.txt'+" | wc -l").split()[0] 
print("Test row size:") 
print(row) 
matrix_tmp_test = np.zeros((int(row),col), dtype=np.int64) 
print("Test matrix size:") 
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 = 0 
for 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 + 1 
f.close() 
print("Test Matrix is: \n") 
print(matrix_tmp_test) 
print(label_tmp_test) 

print("Test Label Size:") 
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=xtrain 

ytrain=[] 
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 

Last Betreute Modell

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

Antwort

5

Sie eine bestimmte Datenstruktur in der scipy Paket namens Sparse Matrix verwenden kann:

Nach der definitionhttp://docs.scipy.org/doc/scipy/reference/sparse.html:

Eine Sparse Matrix ist einfach ein Matrix mit einer großen Anzahl von Nullwerten. Im Gegensatz dazu wird eine Matrix, in der viele oder die meisten Einträge nicht Null sind, als dicht bezeichnet. Es gibt keine strikten Regeln für das, was eine spärliche Matrix ausmacht, also werden wir sagen, dass eine Matrix spärlich ist, wenn es einen Vorteil für die Ausnutzung ihrer Sparsität gibt. Darüber hinaus gibt es eine Vielzahl von dünn besetzten Matrixformaten, die verschiedene Sparsitätsmuster (die Struktur von Nicht-Null-Werten in einer dünn besetzten Matrix) und verschiedene Methoden für den Zugriff auf und die Manipulation von Matrixeinträgen ausnutzen.

Verwandte Themen