kabaohのブログ

仕事ができなすぎて辛いので、趣味に逃げるカバ野郎

自分でタイタニックのチュートリアルを解く(4)

早速勉強をサボってしまった。
最近具合が悪いというのがいいわけ。

いま規約みたら、私的にコードやデータを共有しては行けないとあった。
フォーラム内の人間が見れるのであれば別に構わないがと。
別にアクセス制限してないから構わない方にはいるのだろうか。
人来ないし大丈夫だけど、なんか言われたら考える。

とりあえず、ひとまずデータを見やすく整形して行く必要がありそう。
今日は全然できてないが、下記の本でも参考にしてみようかしら。


Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

Pythonによるデータ分析入門 ―NumPy、pandasを使ったデータ処理

自分でタイタニックのチュートリアルを解く(3)

趣味でやってる合気道、そして友人との飲み会の合間に調べ調べ実装してみました。

import matplotlib.pyplot as plt
import numpy as np
from numpy.random import *

#解析データづくり
x_true = rand(100,1) * 100 - 0
y_true = rand(100,1) * 100 - 0
t_true = np.ones((100,1))


x_false = rand(100,1) * 100 - 100
y_false = rand(100,1) * 100 - 100
t_false = -np.ones((100,1))

data_true = np.c_[x_true,y_true,t_true]
data_false = np.c_[x_false,y_false,t_false]

とりあえず、これで解析しやすそうな判別データを作成。
ちなみに描画してみるとこんな感じ
f:id:kabaoh:20151130003044p:plain

これで解析すべきデータはできた。
あとはこれを2分する直線を書いてみる。

%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
import csv 
from numpy.random import *
def f(x,y,w0,w1,w2):
    return w0 + w1*x + w2*y 

# Import Data
with open('data.csv', 'r') as d:
    reader = csv.reader(d)
    data = list(reader)
    
# 初期値
w0 = 100.0
w1 =  -1.0
w2 = 1.0

x_true=[]
y_true=[]

x_false=[]
y_false=[]


# main

for itr in range(0,10):
    for i in range(0,len(data)):
        x = float(data[i][0])
        y = float(data[i][1])
        t = float(data[i][2]) 
        
        if f(x,y,w0,w1,w2)*t > 0:
            continue
        else:
            print("false")
            w0 = w0 + t 
            w1 = w1 + t*x
            w2 = w2 + t*y            
            print(w0,w1,w2)
            print(w1/w2,w0/w2)

x = np.linspace(-100,100,201)  
y = -(w1/w2)*x - (w0/w2)  

plt.plot(x,y,"r-")

for i in range (0,len(data)):
    if int(data[i][2]) > 0:
        x_true.append(float(data[i][0]))
        y_true.append(float(data[i][1]))
     
    else:
        x_false.append(float(data[i][0]))
        y_false.append(float(data[i][1]))

plt.scatter(x_true,y_true,color='b',marker='x')
plt.scatter(x_false,y_false,color='r',marker='x')
plt.show()
plt.close()

直線をあわせてプロットするとこんな感じ
f:id:kabaoh:20151130003716p:plain


恥を忍んでダメダメコードを公開してみた。

自分でタイタニックのチュートリアルを解く(2)

さて、自分で解くとは言ったものの。

どうしたら良いのだろう。

 

どこから手をつけていいかわからない。

ランダムフォレストってなんやねん。

 

とりあえず、難しいことはおいておいて。

まずは、男女で生き残ったかどうかを考えてみるのがよいのかしら。

男女 and 年齢とかで分析してみるのもよいのかしらとか考えてた。

しかし、そもそもどうやって、生死を分類するのかしらという疑問が。

 

ということで調べたら分類器というのがあるみたい。

その中で最も基本的なものがパーセプトロンというもののようだ。

自分で実装してみようと思う。

 

過去の経験から、まずは単純なところから手を出さないと挫折するからね。

自分でタイタニックのチュートリアルを解く(1)

Kaggleのタイタニックチュートリアルにサンプルコードぶち込むことで、流れ自体を掴んだ。いよいよ次は自分の能力を試す時だ!

 

なお、現在の自分のスペック

--------------------------------------

Python力:  Lv1 (Hello World)

Mac力: Lv2 (Terminalは動かせるよ,cd,ls,pwd,くらいは知ってるよ)

数学力: Lv5 (高校3年生までの微分積分は覚えてる)

英語力: Lv2 (I'm fine, thank you.) 

--------------------------------------

 

この圧倒的低スペック...。

先が思いやられる。

 

初kaggle

kaggleというサイトがある。kaggleとは何かは、まだ使い始めて2日目の自分にはきちんと説明できない。今のところ「与えられたデータを解析して、何らかの結果を予想。それがいかに優れているかを競う場所」といったイメージをもっている。

 

ともかく面白いという話を聞きつけて、現実逃避の一環で挑戦することにしてみた。

kaggle界におけるHello  world的存在が、タイタニックチュートリアルだときいたので、試しにやってみることにした。

 

...まず英語が読めない

いったい、何が求められているんだ...。俺に何をしろっていうんだ。

 

英語ググりまくりでなんとか読んだところ

 

1. 乗客のデータはくれてやる

2. どんな人達が生き残りやすかったか分析して見るんだな!

 

ということみたいだ。なるほど。

Get  the Dataとかいうところでデータは取ってこれた。

サンプルコードもあるみたいだ。

 

実行!!!

 

自分の開発python3でした...。

まだまだ先は長い。