2014-12-17 3 views
4

scikit-learn 모듈을 사용하여 계산 된 KDE에서 PDF 추정치를 계산하려고합니다. 저는 득점의 2 가지 변종을 보았습니다. 나는 아래의 진술 A와 B를 모두 시도하고 있습니다. 다음과 같은 오류에Scikit-Learn KDE에서 PDF 추정

문 A를 결과 : 다음과 같은 오류에

AttributeError: 'KernelDensity' object has no attribute 'tree_'

문 B 결과 :

ValueError: query data dimension must match training data dimension

바보 오류처럼 보인다,하지만 난 알아낼 수 없습니다. 도와주세요. 코드가 ...

from sklearn.neighbors import KernelDensity 
import numpy 

# d is my 1-D array data 
xgrid = numpy.linspace(d.min(), d.max(), 1000) 

density = KernelDensity(kernel='gaussian', bandwidth=0.08804).fit(d) 

# statement A 
density_score = KernelDensity(kernel='gaussian', bandwidth=0.08804).score_samples(xgrid) 

# statement B 
density_score = density.score_samples(xgrid) 

density_score = numpy.exp(density_score) 

도움이된다면, scikit-learn 0.15.2 버전을 사용하고 있습니다. scipy.stats.gaussian_kde를 사용하여이 작업을 성공적으로 수행 했으므로 데이터에 문제가 없습니다.

답변

7

,이 오류와 같은 문제가 있었다 많은 차원에서 단 1 개의 데이터 포인트 만 있다고 가정합니다! 예를 들어, 교육 데이터 크기가 100000 포인트 인 경우 d는 100000x1이지만 적합하면 1x100000으로 계산됩니다! xgrid.shape (-1,1)

density = KernelDensity(kernel='gaussian', bandwidth=0.08804).fit(d.reshape(-1,1)) 
density_score = density.score_samples(xgrid.reshape(-1,1)) 

참고 d.reshape (-1,1)과 같은 :

그래서, 당신은 피팅 전에 D 모양을 변경해야하는 문 A가있는 문제는 아직 적합하지 않은 객체에서 score_samples를 사용하고 있다는 것입니다!

1

배포판에서 샘플링하려면 먼저 fit() 함수를 호출해야합니다.

ValueError: query data dimension must match training data dimension 

당신이 1-D 배열 데이터를 가지고 있지만, 당신은 먹이 때() 함수에 맞는 것을, 그것을 만드는 여기에 문제가있다 :

문 B와
+0

나는 부른다. 'density = KernelDensity (kernel = 'gaussian', 대역폭 = 0.08804) .fit (d)'줄을보십시오. – mlworker