【Python】 confusion_matrtixの作り方

seabornのheatmapによって表現できる.

import numpy as np
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
# scikit-learnのconfusion_matrixクラスで
b = np.array([[251,  22,   1,   3,   0,   1,   3,  16,  24],
               [  8, 459,   0,   2,   0,   1,   0,   4,  23],
               [  0,   1, 557,   0,   0,   0,   0,   1,   0],
               [  0,   3,   0,  90,   0,   0,   0,   0,   0],
               [  0,   0,   0,   1,   1,   0,   0,   4,   0],
               [ 35,  20,   1,   8,   0,  50,   0,   7,  31],
               [  0,   3,   0,   5,   0,   0,  78,   0,   0],
               [ 11,   1,   4,   9,   0,   1,   0, 228,   1],
               [ 34,  39,   0,   0,   0,   2,   0,  11, 119]])
labels = ["a","b","c","d","e","f","g","h","i"]
#pandas.dataframeに格納
b = pd.DataFrame(b,index=labels,columns=index)
sns.heatmap(b,annot=True,cmap="Reds")
plt.show()

【pandas】 DataFrameの操作について

Irisで試す

# データCSVの読み込み
iris = pd.read_csv("input.csv")

f:id:umashika5555:20171113212446p:plain

# データのある特徴列を削除する
iris.drop("Id", axis=1, inplace=True)

f:id:umashika5555:20171113212515p:plain

# 同データのカウント
# ”Species”という特徴列の名義特徴量の種類をそれぞれカウント
iris["Species"].value_counts()

f:id:umashika5555:20171113212537p:plain

# 各特徴列の値の個数をカウント
# null値があるかもチェック
# memoryなども表示してくれる
iris.info()

f:id:umashika5555:20171113212608p:plain

# count, mean, std, min, 25, 50, 75, maxを算出
iris.describe()

f:id:umashika5555:20171113212623p:plain

特徴量の削除

violinplotによって特徴量の分布が同じようなときjointplotによって, それらの特徴量の相関関係を調べる.
実際に相関係数の絶対値が1に近づいたらどちらかの特徴量を学習から削除することができるそう.
f:id:umashika5555:20171113035634p:plain
上図で2つの特徴量の分布が同じようなのでjointplotを利用し, 相関計数を調べる.
相関係数は0.86とかなり高い値なのでどちらかの特徴量列を外す場合があるらしい.
f:id:umashika5555:20171113035600p:plain

【seaborn】 plotについて

seabornライブラリでデータを可視化したい場合, BoxplotとViolinplotなどがある.
ラベルAとラベルBの正規化, 標準化済の特徴量3つをとってきて比較することに用いられる.
Boxplotでは下図のような図をプロットでき, 中央値などがわかりやすい.
f:id:umashika5555:20171113033851p:plain
(図引用: https://qiita.com/TomHortons/items/5b585a6860ff5ccd5ba5)

Violinplotでは下図のように分布の形や, 多峰性を確認しやすい.
f:id:umashika5555:20171113034241p:plain

【参考】
https://qiita.com/TomHortons/items/5b585a6860ff5ccd5ba5

【pandas】 DataFrameに辞書形式で格納する

>>> pd.DataFrame({"feature1":[1,2,3],"feature2":[0.1,0.2,0.3]})
feature1	feature2
0	1	0.1
1	2	0.2
2	3	0.3


【参考】
【pandas】 CSVの読み込み - メモ的な何か
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.describe.html

【pandas】 DataFrame.describe()について

DataFrame.describe()はDataFrameに格納されているそれぞれの特徴量(横軸)に対して
数値データならcount, mean, std, min, 25%, 50%, 75%, maxを計算,
カテゴリデータならcount, unique(カテゴリの種類), top(先頭), freq(最頻値)を計算してくれる便利な機能

【参考】
https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.describe.html

【pandas】 CSVの読み込み

csvファイルをpandas.DataFrameに格納する方法

# 読み込み
csv_path = "./data.csv"
data = pd.read_csv(csv_path)

# データの表示(Jupyter notebookなどで)
# .head()メソッドを使えば,先頭から5行が表示される
data.head()

# 特徴量の名前をリストとして取得する(特徴量は基本的に横軸にセットされる)
# インスタンス変数columnsとして取得できる
col = data.columns

# データフレームの特徴量の一つを抽出(ラベルなど)
# 特徴量の名前"name_of_feature"に対して
y = data.name_of_feature

【Python】 集合についての操作

# 集合の宣言
a = set([1,2,3])
b = set([3,4,5])

# 和集合
> a | b
{1,2,3,4,5}

# 積集合
> a & b 
{3}

# 集合の差(A-B = A-(A∩B)
> a - b
{1,2}

# 対象差(AもしくはBにのみ含まれる A+B-(A∩B)
> a ^ b
{1,2,4,5}

# 部分集合の判定
> a <= b
False
>{3,4} <= b
True

【注意】
部分集合の判定で{3} in {3,4,5}とやってもFalseとなる.
 3 \in \{3,4,5\}だが \{3\} \not \in \{3,4,5\}だからだ.

リスト型では + は連結として定義されている. -,^,&は定義されていない.<=は定義されている.

【参考】
https://qiita.com/Tocyuki/items/0bc783daab382ef7a0ec