digits에서 랜덤 포레스트와 주성분 분석의 기여율을 비교해 본다
8042 단어 파이썬랜덤 포레스트scikit-learn주성분 분석
처음에
또한 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주성분까지 생각하면 또 결과는 바뀌어 올지도 모릅니다만, 대충 숫자를 확인해 보았더니, 역시 제일 좌단과 우단은 거의 포함되어 아니었다.
Reference
이 문제에 관하여(digits에서 랜덤 포레스트와 주성분 분석의 기여율을 비교해 본다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shushin/items/f337948e5a59f6854650텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)