2017-04-19 5 views
1

하나의 TFIDF에 대해 닉번을 실행할 수 있지만 목록에 대해서는 실행할 수 없습니다.Scikit의 가장 가까운 이웃에 대한 TFIDF 점 목록

세부 사항이 나오기 전에 각 데이터 포인트에 대한 닉 바를 실행하는 데 오랜 시간이 걸리고 니스 플레이어에게 포인트 목록을 최적화하면 내부적으로 최적화 될 것이라고 생각합니다. 윈 문서를 기반으로

: http://scikit-learn.org/stable/modules/generated/sklearn.neighbors.NearestNeighbors.html#sklearn.neighbors.NearestNeighbors.kneighbors

그것은 내가 여러 지점에 대한 조회 할 수 있습니다 말한다 : 나는 동일한 작업을 수행하려고

>>>X = [[0., 1., 0.], [1., 0., 1.]] 
>>>neigh.kneighbors(X, return_distance=False) 
>>>array([[1], 
    [2]]...) 

. 나는 개별적으로 각 포인트에 대한 kneighbors을 실행할 수 있습니다

from sklearn.neighbors import NearestNeighbors 
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer 

samples = ["This is a test","a very good test","some more text"] 
count_vect = CountVectorizer() 
X_train_counts = count_vect.fit_transform(samples) 
tfidf_transformer = TfidfTransformer() 
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) 
neigh = NearestNeighbors(n_neighbors=1, n_jobs=-1) 
neigh.fit(X_train_tfidf) 

ll=[] 
test=["Test if this works","Zoom zoom"] 
for k in test: 
    predict = count_vect.transform([k]) 
    X_tfidf2 = tfidf_transformer.transform(predict) 
    ll.append(X_tfidf2) 
    res = neigh.kneighbors(X_tfidf2, return_distance=False) 
#res = neigh.kneighbors(ll, return_distance=False) 

나는 목록에 모든 TFIDF 스파 스 매트릭스를 추가하고 내가 오류가 발생하려고 할 때. 오류가 발생하면 마지막 줄의 주석 처리를 제거하십시오.

오류 : 에 ValueError : (... 라인 입술 =의 neigh.kneighbors에) 시퀀스로 배열 요소를 설정

+1

_actually_ 실행되는 샘플 코드를 게시 할 수 있습니까? –

+0

데모 데이터로 게시물을 업데이트하여 실행합니다. – Sib

답변

2

보십시오 루프없이

from scipy import sparse 

from sklearn.neighbors import NearestNeighbors 
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer 

samples = ["This is a test","a very good test","some more text"] 
count_vect = CountVectorizer() 
X_train_counts = count_vect.fit_transform(samples) 
tfidf_transformer = TfidfTransformer() 
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) 
neigh = NearestNeighbors(n_neighbors=1, n_jobs=-1) 
neigh.fit(X_train_tfidf) 

ll=[] 
test=["Test if this works","Zoom zoom"] 
for k in test: 
    predict = count_vect.transform([k]) 
    X_tfidf2 = tfidf_transformer.transform(predict) 
    ll.append(X_tfidf2) 

ll = sparse.vstack((ll)) 
res = neigh.kneighbors(ll, return_distance=False) 

: scipy 오기로부터 스파 스

from sklearn.neighbors import NearestNeighbors 
from sklearn.feature_extraction.text import CountVectorizer, TfidfTransformer 

samples = ["This is a test","a very good test","some more text"] 
count_vect = CountVectorizer() 
X_train_counts = count_vect.fit_transform(samples) 
tfidf_transformer = TfidfTransformer() 
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts) 
neigh = NearestNeighbors(n_neighbors=1, n_jobs=-1) 
neigh.fit(X_train_tfidf) 

test=["Test if this works","Zoom zoom"] 
X_test_counts = count_vect.transform(test) 

X_test_tfidf = tfidf_transformer.transform(X_test_counts) 

res = neigh.kneighbors(X_test_tfidf, return_distance=False) 
+0

시도 할 때 : ValueError : X 및 Y 행렬에 대해 호환되지 않는 차원입니다. X.shape [1] == 16 while Y.shape [1] == 8 – Sib

+0

ahh, 쓰레기, hstack 대신 vstack :) 업데이트 됨 –

+0

작동하는 것 같습니다 :) 결과가 동일한지 테스트합니다. 대답을 받아 들일 것입니다! – Sib