タグ
ケーブルが増えて来たのでタグを付けてみました。
SANWAのファイバータグを買ってみましたが、少し大きめでした。
タグの部分はしっかりした作りで長持ちしそうです。
Rclone
ファイルをネットにバックアップしたかったので、Rcloneを試してみました。
こちらのサイトを参考にしたら簡単に出来ました。
Rclone - Sync File and Directories to Cloud Storage in Linux
ハブ
以前から使っていた8ポートのハブが一杯になってしまったので
NETGEARのGS116Eを買ってみました。
使わない気もしますがVLANやQoSまで設定できるみたいですね。
NETGEAR アンマネージプラススイッチ ギガ16ポート 管理機能付 無償永久保証 GS116E-200JPS
- 出版社/メーカー: ネットギア
- 発売日: 2013/11/18
- メディア: Personal Computers
- この商品を含むブログ (2件) を見る
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))))
ID3
Wikipediaの情報を元にpythonでID3の決定木を試してみました。
今回は画面に表示するだけにしました。
”余分な変数を削除し”と書いてあった通り、変数が消えてしまいましたが、バグではなくこういうものなんだろうか?
# 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()
やはり、慣れた言語が扱いやすいですね。