# 準備 # slideにした時にlatexが変換されない場合の対処 https://gist.github.com/damianavila/ba6a308bd0e605db0e6e %matplotlib inline import numpy as np import scipy as sp import matplotlib.pyplot as plt import matplotlib.image as mpimg from IPython.display import display, Image # osがDarwinのときはローカルと判定 os = !uname -s use_local = os == "Darwin" # ローカルじゃない場合は作者のページから取ってくる base_url = "./figure" if use_local else "http://research.microsoft.com/en-us/um/people/cmbishop/PRML/prmlfigs-png" # 図表示用 disp_figure = lambda nfig: display(Image("{0}/Figure{1}.png".format(base_url, nfig), width="500px", embed=True)) # D=2の場合 disp_figure("4.1") # D=2の場合 disp_figure("4.1") disp_figure("4.2a") disp_figure("4.2b") disp_figure("4.3") disp_figure("4.4a") disp_figure("4.4b") # 最小二乗解による分類境界 disp_figure("4.5a") # ロジスティック回帰によるクラス分類 disp_figure("4.5b") # 図4.6左図 # クラス平均を結んだ直線上へ射影しても重なり合う部分が多いことを示す # クラス分布の非対角な共分散が強いために起こる問題 disp_figure("4.6a") # 図4.6の左図からwベクトルの方向を分離度が最大となるような方向に修正 disp_figure("4.6b") from sklearn.datasets import load_iris data = load_iris() features = data["data"] feature_names = data["feature_names"] target = data["target"] target_names = data["target_names"] labels = target_names[target] print "150サンプルx4次元の特徴量データ" print features.shape print features[0] print "" print "特徴量の名前のリスト" print feature_names # list print "" print "正解データ" print target.shape print target[0:150] print "" print "正解データの名前のリスト" print target_names[0:150] print "target_names[target] (target_namesはndarray)" print labels import itertools # 可視化 fig = plt.figure(1, figsize=(16,16)) for t, marker, c in zip(range(3), ">ox", "rgb"): # 品種ごとに色とマーカを変えてプロット for (i,j) in itertools.combinations(range(4), 2): ax = fig.add_subplot(4, 4, 4*i + j + 1) ax.set_xlabel(feature_names[i]) ax.set_ylabel(feature_names[j]) ax.scatter(features[target == t, i], features[target == t, j], marker=marker, c=c) # http://scikit-learn.org/stable/auto_examples/decomposition/plot_pca_vs_lda.html from sklearn import datasets from sklearn.decomposition import PCA from sklearn.lda import LDA iris = datasets.load_iris() X = iris.data y = iris.target target_names = iris.target_names pca = PCA(n_components=2) X_r = pca.fit(X).transform(X) lda = LDA(n_components=2) X_r2 = lda.fit(X, y).transform(X) # Percentage of variance explained for each components print('explained variance ratio (first two components): %s' % str(pca.explained_variance_ratio_)) plt.figure() for c, i, target_name in zip("rgb", [0, 1, 2], target_names): plt.scatter(X_r[y == i, 0], X_r[y == i, 1], c=c, label=target_name) plt.legend() plt.title('PCA of IRIS dataset') plt.figure() for c, i, target_name in zip("rgb", [0, 1, 2], target_names): plt.scatter(X_r2[y == i, 0], X_r2[y == i, 1], c=c, label=target_name) plt.legend() plt.title('LDA of IRIS dataset') plt.show()