友之介的つぶやきブログ

PCやらプログラムやらぶつぶつ言ってます

タグ

ケーブルが増えて来たのでタグを付けてみました。
SANWAのファイバータグを買ってみましたが、少し大きめでした。
タグの部分はしっかりした作りで長持ちしそうです。

 

 

サンワサプライ CA-TAG137 ファイバータグ

サンワサプライ CA-TAG137 ファイバータグ

 

 

ハブ

f:id:tomonosuke01:20160214140650j:plain

 

以前から使っていた8ポートのハブが一杯になってしまったので
NETGEARのGS116Eを買ってみました。
使わない気もしますがVLANやQoSまで設定できるみたいですね。

 

 

 

scikit-learnの決定木

scikit-learnの決定木を試してみました。
データは先日と同様のWikipediaのものを使用です。
データの中身は数値にしないといけないみたいなので、適当に変換してみました。

 

 # coding: utf8
from sklearn import tree

data = [ [0,0,0],
    [0,1,0],
    [1,1,0],
    [0,0,1],
    [1,0,0] ]

target = ['鳥類', '哺乳類' , '哺乳類' , '爬虫類' , '鳥類']

clf = tree.DecisionTreeClassifier()
clf = clf.fit(data, target)

tree.export_graphviz(clf, out_file='test.dot',
    feature_names=range(3), class_names=sorted(list(set(target))))

 

 

f:id:tomonosuke01:20160207141829p:plain

 

ID3

Wikipediaの情報を元にpythonでID3の決定木を試してみました。

ID3 - Wikipedia

 

今回は画面に表示するだけにしました。
”余分な変数を削除し”と書いてあった通り、変数が消えてしまいましたが、バグではなくこういうものなんだろうか?

 

 # coding: utf8
import math

label = ['食性', '発生形態', '体温']
data = [['ペンギン', '肉食', '卵生', '恒温', '鳥類'],
    ['ライオン', '肉食', '胎生', '恒温', '哺乳類'],
    ['ウシ', '草食', '胎生', '恒温', '哺乳類'],
    ['トカゲ', '肉食', '卵生', '変温', '爬虫類'],
    ['ブンチョウ', '草食', '卵生', '恒温', '鳥類']]

def getKeys(data, idx):
    return list(set(map(lambda x:x[idx], data)))

def getEntropy(data, keys):
    cls = map(lambda x:x[-1], data)
    denominator = float(len(cls))
    if denominator == 0: return 0

    m = 0
    for key in keys:
        p = cls.count(key) / denominator
        if p != 0:
            m += -p * math.log(p, 3)

    return m

def getExpectation(data, keys, mc, idx, ckeys):
    denominator = float(len(data))
    if denominator == 0: return 0

    m = mc
    for key in ckeys:
        c2 = filter(lambda x:x[idx] == key, data)
        m2 = getEntropy(c2, keys)
        m += -(m2 * (len(c2) / denominator))

    return m

def carateTree(data, keys, idxs, ts=""):
    mc = getEntropy(data, keys)

    maxm = 0
    idx = 0
    for i in idxs:
        m = getExpectation(data, keys, mc, i, getKeys(data, i))
        if maxm < m:
            maxm = m
            idx = i

    print ts + label[idx - 1]
    ts += "\t"
    idxs = filter(lambda x:x != idx, idxs)
    for key in getKeys(data, idx):
        fdata = filter(lambda x:x[idx] == key, data)
        if len(getKeys(fdata, -1)) <= 1:
            print ts + key, fdata[0][-1]
            continue

        print ts + key
        carateTree(fdata, keys, idxs, ts + "\t")


keys = getKeys(data, -1)
idxs = range(1, len(data[0]) - 1)

carateTree(data, keys, idxs)

 

 

pyplotを試してみる

pyplotを試してみる

確率分布等、見た方がわかると思いpyplotを試してみました。

とりあえず、二項分布で実験です。

 

import math
import matplotlib.pyplot as plt

def comb(n, x):
    return math.factorial(n) / (math.factorial(n - x) * math.factorial(x))

n = 10
p = 0.2
xlist = range(0, 10)
ylist = []
for x in xlist:
    y = comb(n, x) * p ** x * (1 - p) ** (n - x)
    ylist.append(y)

plt.bar(xlist, ylist)
plt.show()
 

 

f:id:tomonosuke01:20160117190817p:plain

やはり、慣れた言語が扱いやすいですね。

 

機械学習

f:id:tomonosuke01:20160110162734j:plain

 

今年は機械学習を覚えたいと思い、色々本を読み始めました。
一応去年から読んではいるのですが、なかなか難しいですね。

色々なサイトを見てると「フリーソフトではじめる機械学習入門」がわかりやすいと
書いてあったので読んでみました。

 

フリーソフトではじめる機械学習入門

フリーソフトではじめる機械学習入門