digits에서 랜덤 포레스트와 주성분 분석의 기여율을 비교해 본다

처음에



또한 digits 재료, 첫 번째는 여기 . 같은 데이터를 여러가지 방법을 사용해, 엉망진창 분석하는 것은 데이터 분석의 기본중의 기본(?)이므로… Random Forest는 매개변수 기여율까지 낼 수 있는 장점이 있습니다. 이번에는 digits를 Random Forest에서 학습시켜 보고, 1회째로 분석한 PCA와 비교해 가고 싶습니다.

Random Forest를 사용해보기


# -*- coding: utf-8 -*-
from sklearn import datasets 
from sklearn import ensemble
from sklearn import metrics
from sklearn import decomposition
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt
import numpy as np

digits = datasets.load_digits()
#画像データとtargetデータを取得
data,target = digits["data"],digits["target"]
data /=16

#テストデータを0.75,0.25に分割
data_train,data_test,target_train,target_test =\
train_test_split(data,target,test_size=0.25, random_state=0)

#random forest
clf = ensemble.RandomForestClassifier()
clf.fit(data_train,target_train)

predict = clf.predict(data_test)
print("accuracy_score:", metrics.accuracy_score(predict,target_test))

accuracy_score: 0.95111111111111111

특히 파라미터 튜닝을 실시하고 있지 않습니다만, 그 나름의 정답률은 아닐까요? sklearn은 기계 학습의 알고리즘이 변화해도, 같은 쓰는 방법을 할 수 있으므로 사용하기 쉽네요. 다음으로 Random Forest에서 변수별로 특징량을 내보냅니다.
plt.imshow(clf.feature_importances_.reshape(8,8),cmap=plt.cm.Reds)
plt.show()

'clf.feature_importances_'에서 각 특징량의 중요도를 낼 수 있습니다. digits가 64차원인 이미지 데이터이므로 clf.feature_importances_도 64차원 숫자가 배출됩니다. 그대로라면 알기 어려우므로, reshape하고 8×8의 2차원 배열로 고쳐 화상 데이터로서 가시화했습니다.



어두운 붉은 곳이 기여율이 높은 곳. 즉, Random Forest가 이미지를 구분하는 데 사용한 곳입니다. 가장 왼쪽과 오른쪽 행은 존재하지 않더라도 기계 학습적으로 필요하지 않은 데이터입니다.

주성분 분석



그런 다음 주성분 분석을 사용하여 첫 번째 주성분에 사용되는 변수를 살펴보고 싶습니다.
#主成分分析
pca = decomposition.PCA(n_components=1)
pca.fit_transform(data)

#主成分の変数のヒストグラムをとる
plt.hist(pca.components_.T, bins=15)
plt.xlim(-0.4,0.4)
plt.show()

pca.components_로 변수를 출력할 수 있습니다. 그러나, pca.components_에서는 데이터의 사이즈가 (1,64)가 되어 버리고 있으므로, 「.T」로 전치시켜 히스토그램을 렌더링 하고 있습니다. 히스토그램은

됩니다. 0 부근의 변수는 주성분에 많이 포함되지 않는 변수로, 0에서 멀어질수록 주성분 중에 많이 포함되어 있는 변수가 됩니다.

주성분에 포함된 변수를 시각화하면

#主成分の変数の絶対値をreshapeして、8×8にする
plt.imshow(np.abs(pca.components_.reshape(8,8)),cmap=plt.cm.Reds)
plt.show()

결과는



가장 짙은 붉은 부분으로 0.3 정도. 예를 들어 맨 왼쪽 상단의 픽셀에서는 4.9e-17 정도로 그 차이는 역연하고 있습니다.
random forest와 마찬가지로 가장 왼쪽과 오른쪽 가장자리가 거의 기여하지 않는다는 결과가 나왔습니다. 제1주성분만이므로, 제2주성분, 제3주성분까지 생각하면 또 결과는 바뀌어 올지도 모릅니다만, 대충 숫자를 확인해 보았더니, 역시 제일 좌단과 우단은 거의 포함되어 아니었다.

좋은 웹페이지 즐겨찾기