2017-11-22 4 views
0

데이터의 첫 번째 열은 'label'이고 첫 번째 열에서 마지막 784 번째 열까지의 열은 이미지 (28 * 28) 형식의 표현을 포함합니다 .I load (filename) 함수를 사용하여 numpy 배열의 튜플을 만들었습니다. 이 함수는 이미지에 레이블을 지정합니다.NotImplementedError : 할당에서 유효하지 않은 유형

이제는 아래 함수 read (digits, path = ".")에서 생성 된 데이터를 사용하고 싶습니다. 이 형식은 scikit 라이브러리의 Support Vector Machine Analysis에 사용됩니다. 사실, 나는 아래쪽으로 두 번째 예제를 모방하려고 노력 중이다. http://cvxopt.org/applications/svm/index.html

데이터를 다시 포맷하려고 시도 할 때 아래에 본문에 복사 된 오류가 표시됩니다. 방법이 있습니까, 원하는 형식으로 가져올 수 있습니까?

sizeImages = 5851 sizelabels = 5851 
Traceback (most recent call last): 
    File "svm.py", line 62, in <module> 
    print read([8], path = dir_path) 
    File "svm.py", line 59, in read 
    images[i, :] = img[ ind[i]*28*28: (ind[i]+1)*28*28] 
NotImplementedError: invalid type in assignment 

train_name=dir_path+'train8.csv' 
def load(filename): 
    # read file into a list of rows 
    with open(filename, 'rU') as csvfile: 
     lines = csv.reader(csvfile, delimiter=',') 
     rows = list(lines) 

    # create empty numpy arrays of the required size 
    data = np.empty((len(rows), len(rows[0])-1), dtype=np.float64) 
    expected = np.empty((len(rows),), dtype=np.int64) 

    # fill array with data from the csv-rows 
    for i, row in enumerate(rows): 
     data[i,:] = row[1:] 
     expected[i] = row[0] 

    result_data = data, expected 
    return result_data 

> Result: 

    (array([[ 0., 0., 0., ..., 0., 0., 0.], 
       [ 0., 0., 0., ..., 0., 0., 0.], 
       [ 0., 0., 0., ..., 0., 0., 0.], 
       ..., 
       [ 0., 0., 0., ..., 0., 0., 0.], 
       [ 0., 0., 0., ..., 0., 0., 0.], 
       [ 0., 0., 0., ..., 0., 0., 0.]]), array([1, 1, 1, ..., 1, 1, 1])) 


def read(digits, path = "."): 
    data= load(train_name) 
    print "sizeImages = ",len(data[0]), "sizelabels = ", len(data[1]) 

    lbl=data[1] 
    size=len(data[1]) 
    img=data[0] #print type(img) OUTPUT: <type 'numpy.ndarray'> 

    img =[l[0] for l in img] # print type(img) OUTPUT: <type 'list'>, 
    *This is used to unpack the numpy array from above.* 

    ind = [ k for k in xrange(size) if lbl[k] in digits ] 

    images = matrix(0, (len(ind), 28*28)) 
    labels = matrix(0, (len(ind), 1)) 

    #images = data[0] 
    labels = img 

    for i in xrange(len(ind)): 
     images[i, :] = img[ ind[i]*28*28: (ind[i]+1)*28*28] 
     labels[i] = lbl[ind[i]] 
    return images,labels 
print read([8], path = dir_path) 

Result:

원하는 형식 :이다

**(<5949x784 matrix, tc='i'>, <5949x1 matrix, tc='i'>)** 

상기 제 1 행렬은 상기 인 {배열 등 희소 행렬} 형상 = N_SAMPLES, n_features] 트레이닝 벡터, 여기서 n_samples는 샘플 수와 n_features는 피쳐의 수입니다.

sample data: 
'''1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 38 254 109 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 87 252 82 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 135 241 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 45 244 150 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 84 254 63 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 202 223 11 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 32 254 216 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 95 254 195 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 140 254 77 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 57 237 205 8 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 124 255 165 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 171 254 81 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 24 232 215 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 120 254 159 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 151 254 142 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 228 254 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 61 251 254 66 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 141 254 205 3 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 215 254 121 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 5 198 176 10 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0''' 
+0

에 오신 것을 환영합니다. 도움말 설명서의 게시 지침을 읽고 따르십시오. [최소한의 완전하고 검증 가능한 예제] (http://stackoverflow.com/help/mcve)가 여기에 적용됩니다. MCVE 코드를 게시하고 문제를 정확하게 설명하기 전까지는 효과적으로 도움을 드릴 수 없습니다. 게시 된 코드를 텍스트 파일에 붙여넣고 설명한 문제를 재현 할 수 있어야합니다. – Prune

+0

'print type ()'문장을 삽입하여 데이터 유형을 확인하십시오. 실패한 임무지기 직전에 배치하십시오. – Prune

+0

안녕 Prune, 나는 인쇄를 통해 디버깅을 시도했다. 나는 반갑 습니다. 모든 반품을 위해. MCVE에 감사드립니다. 독자가 문맥을 이해할 수 있도록 두 가지 기능을 모두 게시했습니다. – lpt

답변

0

하나 개의 잠재적 인 솔루션입니다 :에 StackOverflow에

from sklearn.datasets.base import Bunch 

file=np.loadtxt('~/data/test3.txt', dtype=int) 
target_index=0 

dataset = file 
data = None 
target = None 
target_names = None 
feature_names = None 

# Target assumed to be either last or first row 
if target_index == -1: 
    data = dataset[:, 0:-1] 
    target = dataset[:, -1] 
elif target_index == 0: 
    data = dataset[:, 1:] 
    target = dataset[:, 0] 
else: 
    raise ValueError("Target index must be either -1 or 0") 

reformatData=Bunch(data=data, target=target) 

print reformatData['data'].shape, reformatData['target'].shape 
관련 문제