2017-10-27 2 views
-1

에서 NaN이 제거 I 다음 코드 조각이 :scipy 희소 행렬

input_data = pd.read_csv('file_name.tsv', sep='\t') 
data = sparse.csr_matrix(data.values) 
model = TruncatedSVD(n_components=2) 
model.fit(data) 

이제 TruncatedSVD가 scipy에서 스파 스 행렬을 않습니다하지만이 NaN을하지 않습니다. 나는 crs_matrix 함수가 NaN을 제거 할 것으로 예상했으나 그렇지 않습니다. 그리고이 NaN을 제 scipy 행렬에서 제거하는 방법을 찾을 수 없습니다.

이렇게하는 좋은 방법이 있습니까? 나는 scipy 내에서 기능을 찾을 수 없습니다.

+0

그냥 'np.nan'의 인스턴스를 0으로 설정 하시겠습니까? –

+1

* NaN을 실제로 제거 할 수는 없습니다. 대체 할 수는 있습니다. 같은 맥락에서 스파 스 매트릭스를 사용하기 때문에 이것이 [XY 문제] (https://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)라고 생각합니다. 왜 NaN을 제거 할 것인지 * 알려주십시오. "TruncatedSVD는 그 (것)들을 좋아하지 않기 때문에"이유만큼 좋지 않습니다. 데이터에서 NaN *이 의미하는 바를 알아야합니다. 그렇지 않으면 올바르게 처리하는 방법을 알 수 없습니다. – kazemakase

+0

전체 문제는 Nan datpoint가 알려지지 않았고 실제 0 값이 있습니다. truncatedSVD는 Nan 또는 inf 값을 전달하면 실제로 오류가 발생합니다. – FlorianEn

답변

0

NaN을 0으로 설정 한 결과 최적의 솔루션이 아니었지만이 인스턴스에서 누락 된 값을 대체 할 만족스러운 방법이 없다고 생각합니다.

0

여기에는 몇 가지 방법이 있습니다. 당신이 선택한 것 중 하나 - NaN을 0으로 설정하는 것, 다른 방법은 데이터의 평균값과 동일하게 설정하는 것입니다 (칼럼, 말합시다).

이 ADRESS하는 쉬운 방법이 아주 간단한 예입니다 scikit-learn doc documentation about this issue 자세한 정보를 원하시면, 많이 향상 될 수 있음을 scikit의 imputer와

from sklearn.reprocessing import Imputer 

data_imputer = Imputer(missing_values='NaN, strategy='mean', axis=0) 
# fit the imputer - suppose missing data is in the 0th column 
data_imputer = data_imputer.fit(data[:, 0]) 
# transform the data 
data[:, 0] = data_imputer.transform(X[:, 0]) 

주입니다.