2016-11-08 40 views
2

sklearn을 사용하여 Gaussian Mixture를 정말 열심히 노력하고 있지만 확실히 작동하지 않기 때문에 뭔가 빠졌다고 생각합니다.매개 변수 초기화 skyearn을 사용하여 Python의 가우스 혼합

내 원래 datas는 다음과 같다 :

Genotype LogRatio Strength 
AB  0.392805 10.625016 
AA  1.922468 10.765716 
AB  0.22074 10.405445 
BB  -0.059783 10.625016 

내가 3 개 구성 요소 = 3 개 유전자형과 가우시안 혼합을 수행 할 (AA | AB | BB). 각 유전자형의 무게, 각 유전자형의 평균 로그 비율 및 각 유전자형의 강도 평균을 알고 있습니다.

wgts = [0.8,0.19,0.01] # weight of AA,AB,BB 
means = [[-0.5,9],[0.5,9],[1.5,9]] # mean(LogRatio), mean(Strenght) for AA,AB,BB 

LogRatio 및 Strength 열을 유지하고 NumPy 배열을 만듭니다.

datas = [[ 0.392805 10.625016] 
     [ 1.922468 10.765716] 
     [ 0.22074 10.405445] 
     [ -0.059783 9.798655]] 

가 그럼 난 sklearn의 v0.18에서 혼합물로부터 함수 GaussianMixture을 시험하고 또한 sklearn의 v0.17에서 함수 GaussianMixtureModel 시도 (난 아직도 차이를 보이지 않는 및 사용해야할지 잘 모르는) .
gmm = mixture.GMM(n_components=3) 
OR 
gmm = mixture.GaussianMixture(n_components=3) 

gmm.fit(datas) 

colors = ['r' if i==0 else 'b' if i==1 else 'g' for i in gmm.predict(datas)] 
ax = plt.gca() 
ax.scatter(datas[:,0], datas[:,1], c=colors, alpha=0.8) 
plt.show() 

내가 얻을 것입니다 이것은 좋은 결과이지만 초기 파라미터가 각각

Results of clusterization

나는 gaussianMixture 내 파라미터를 초기화하고 싶은

을 실행 다르게 계산되기 때문에 때마다 변경 또는 GMM 기능을 사용할 수 있지만 내 데이터를 형식화하는 방법을 이해할 수 없습니다. (

+0

매번 같은 결과를 얻으시겠습니까? 그것이 당신의 질문입니까? – MMF

+0

예 매번 동일한 결과가 필요하며 초기 매개 변수를 수정할 수 있다면 그럴 것이라고 믿습니다. – Elysire

+0

그래, 내 대답 좀 봐;) – MMF

답변

0

명시 적으로 시드하여 결과의 ​​재현성에 대한 임의성을 제어 할 수 있습니다의사 난수 생성 프로그램.

gmm = mixture.GaussianMixture(n_components=3) 

해야 할 것 : 대신의

gmm = mixture.GaussianMixture(n_components=3, random_state=3) 

random_stateint해야합니다 : 나는 무작위로 3로 설정했지만 당신이 다른 어떤 정수를 선택할 수 있습니다.

동일한 random_state을 여러 번 실행하면 동일한 결과가 나타납니다.

+0

예 맞아 난 random_state와 같은 결과가 있지만 여전히 "weights_init"및 "means_init"로 내 초기 매개 변수를 수정하고 가중치 목록을 사용할 수 없다 [ 0.8,0.19,0.01]을 배열 형태로 직접 나타냅니다. 나는 무게와 수단을 형성하는 법을 모른다. – Elysire

+0

'무게'와 '평균'의 목록을 넣을 수없는 이유를 모르겠습니다. 문서에 따르면 그렇게하면 통과해야합니다. 어떤 오류가 발생 했습니까? – MMF

+0

오류는 "ValueError : 매개 변수 'weights'가 정규화되어야하지만 합계 (weights) = 0.98377이됩니다. – Elysire