2014-12-25

SVM (Support Vector Machine) Regression

SVM (Support Vector Machine) Regression

Just tried SVM to regress.

Code


import numpy as np
import matplotlib.pyplot as plt
# y = sin(x) + noise
np.random.seed(1)
x = np.random.uniform(0, 2*np.pi,200)
y = np.sin(x) + np.random.normal(loc=0, scale=0.5, size=len(x))
# change the shape of x for scikit-learn
x = x.reshape((len(x),1))

from sklearn import svm
from sklearn import cross_validation
# take 20% for test and use 70% as training data
x_train, x_test, y_train, y_test = cross_validation.train_test_split(x, y, test_size=0.2)
# sort x_test and y_test to plota line graph
index = x_test.argsort(0).reshape(len(x_test))
x_test = x_test[index]
y_test = y_test[index]
# train a support vector machine
reg = svm.SVR(kernel='rbf', C=1).fit(x_train, y_train)
# the coefficient of determination R^2 of the prediction
print('The coefficient of determination R^2 is {0}'.format(reg.score(x_test, y_test)))
# plot
fig, ax = plt.subplots(1)
ax.plot(x_test, y_test, 'bo')
ax.plot(x_test, reg.predict(x_test), 'ro-', label='$R^2={0}$'.format(round(reg.score(x_test, y_test),2)))
ax.legend()
fig.savefig('SupportVectorRegression')
fig.show()

The coefficient of determination R^2 is 0.76986793941


Bibliography:


Visualizing the Stock Market

Visualizing the Stock Market


From 2010.1.1 to today.

Code


print(__doc__)

# Author: Gael Varoquaux gael.varoquaux@normalesup.org
# License: BSD 3 clause
# Naoki Watanabe edited on Decmber 25, 2014
import datetime

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import finance
from matplotlib.collections import LineCollection

from sklearn import cluster, covariance, manifold

###############################################################################
# Retrieve the data from Internet

# Choose a time period reasonnably calm (not too long ago so that we get
# high-tech firms, and before the 2008 crash)
d1 = datetime.datetime(2010, 1, 1)
d2 = datetime.datetime.today()

# kraft symbol has now changed from KFT to MDLZ in yahoo
symbol_dict = {
    'TOT': 'Total',
    'XOM': 'Exxon',
    'CVX': 'Chevron',
    'COP': 'ConocoPhillips',
    'VLO': 'Valero Energy',
    'MSFT': 'Microsoft',
    'IBM': 'IBM',
    'TWX': 'Time Warner',
    'CMCSA': 'Comcast',
    'CVC': 'Cablevision',
    'YHOO': 'Yahoo',
    'DELL': 'Dell',
    'HPQ': 'HP',
    'AMZN': 'Amazon',
    'TM': 'Toyota',
    'CAJ': 'Canon',
    'MTU': 'Mitsubishi',
    'SNE': 'Sony',
    'F': 'Ford',
    'HMC': 'Honda',
    'NAV': 'Navistar',
    'NOC': 'Northrop Grumman',
    'BA': 'Boeing',
    'KO': 'Coca Cola',
    'MMM': '3M',
    'MCD': 'Mc Donalds',
    'PEP': 'Pepsi',
    'MDLZ': 'Kraft Foods',
    'K': 'Kellogg',
    'UN': 'Unilever',
    'MAR': 'Marriott',
    'PG': 'Procter Gamble',
    'CL': 'Colgate-Palmolive',
    'GE': 'General Electrics',
    'WFC': 'Wells Fargo',
    'JPM': 'JPMorgan Chase',
    'AIG': 'AIG',
    'AXP': 'American express',
    'BAC': 'Bank of America',
    'GS': 'Goldman Sachs',
    'AAPL': 'Apple',
    'SAP': 'SAP',
    'CSCO': 'Cisco',
    'TXN': 'Texas instruments',
    'XRX': 'Xerox',
    'LMT': 'Lookheed Martin',
    'WMT': 'Wal-Mart',
    'WAG': 'Walgreen',
    'HD': 'Home Depot',
    'GSK': 'GlaxoSmithKline',
    'PFE': 'Pfizer',
    'SNY': 'Sanofi-Aventis',
    'NVS': 'Novartis',
    'KMB': 'Kimberly-Clark',
    'R': 'Ryder',
    'GD': 'General Dynamics',
    'RTN': 'Raytheon',
    'CVS': 'CVS',
    'CAT': 'Caterpillar',
    'DD': 'DuPont de Nemours'}

symbols, names = np.array(list(symbol_dict.items())).T
quotes=[]
for symbol in symbols:
    try:
        quotes.append(finance.quotes_historical_yahoo_ochl(symbol, d1, d2, asobject=True))
    except:
        print('Not Found {0}'.format(symbol))
#    quotes = [finance.quotes_historical_yahoo_ochl(symbol, d1, d2, asobject=True)
#          for symbol in symbols]
  
open = np.array([q.open for q in quotes]).astype(np.float)
close = np.array([q.close for q in quotes]).astype(np.float)

# The daily variations of the quotes are what carry most information
variation = close - open

###############################################################################
# Learn a graphical structure from the correlations
edge_model = covariance.GraphLassoCV()

# standardize the time series: using correlations rather than covariance
# is more efficient for structure recovery
X = variation.copy().T
X /= X.std(axis=0)
edge_model.fit(X)

###############################################################################
# Cluster using affinity propagation

_, labels = cluster.affinity_propagation(edge_model.covariance_)
n_labels = labels.max()

for i in range(n_labels + 1):
    print('Cluster %i: %s' % ((i + 1), ', '.join(names[labels == i])))

###############################################################################
# Find a low-dimension embedding for visualization: find the best position of
# the nodes (the stocks) on a 2D plane

# We use a dense eigen_solver to achieve reproducibility (arpack is
# initiated with random vectors that we don't control). In addition, we
# use a large number of neighbors to capture the large-scale structure.
node_position_model = manifold.LocallyLinearEmbedding(
    n_components=2, eigen_solver='dense', n_neighbors=6)

embedding = node_position_model.fit_transform(X.T).T

###############################################################################
# Visualization
plt.figure(1, facecolor='w', figsize=(10, 8))
plt.clf()
ax = plt.axes([0., 0., 1., 1.])
plt.axis('off')

# Display a graph of the partial correlations
partial_correlations = edge_model.precision_.copy()
d = 1 / np.sqrt(np.diag(partial_correlations))
partial_correlations *= d
partial_correlations *= d[:, np.newaxis]
non_zero = (np.abs(np.triu(partial_correlations, k=1)) > 0.02)

# Plot the nodes using the coordinates of our embedding
plt.scatter(embedding[0], embedding[1], s=100 * d ** 2, c=labels,
            cmap=plt.cm.spectral)

# Plot the edges
start_idx, end_idx = np.where(non_zero)
#a sequence of (*line0*, *line1*, *line2*), where::
#            linen = (x0, y0), (x1, y1), ... (xm, ym)
segments = [[embedding[:, start], embedding[:, stop]]
            for start, stop in zip(start_idx, end_idx)]
values = np.abs(partial_correlations[non_zero])
lc = LineCollection(segments,
                    zorder=0, cmap=plt.cm.hot_r,
                    norm=plt.Normalize(0, .7 * values.max()))
lc.set_array(values)
lc.set_linewidths(15 * values)
ax.add_collection(lc)

# Add a label to each node. The challenge here is that we want to
# position the labels to avoid overlap with other labels
for index, (name, label, (x, y)) in enumerate(
        zip(names, labels, embedding.T)):

    dx = x - embedding[0]
    dx[index] = 1
    dy = y - embedding[1]
    dy[index] = 1
    this_dx = dx[np.argmin(np.abs(dy))]
    this_dy = dy[np.argmin(np.abs(dx))]
    if this_dx > 0:
        horizontalalignment = 'left'
        x = x + .002
    else:
        horizontalalignment = 'right'
        x = x - .002
    if this_dy > 0:
        verticalalignment = 'bottom'
        y = y + .002
    else:
        verticalalignment = 'top'
        y = y - .002
    plt.text(x, y, name, size=10,
             horizontalalignment=horizontalalignment,
             verticalalignment=verticalalignment,
             bbox=dict(facecolor='w',
                       edgecolor=plt.cm.spectral(label / float(n_labels)),
                       alpha=.6))

plt.xlim(embedding[0].min() - .15 * embedding[0].ptp(),
         embedding[0].max() + .10 * embedding[0].ptp(),)
plt.ylim(embedding[1].min() - .03 * embedding[1].ptp(),
         embedding[1].max() + .03 * embedding[1].ptp())

plt.show()





Automatically created module for IPython interactive environment
Not Found DELL
Cluster 1: Total, Dell, Sanofi-Aventis, Amazon, Kellogg, Chevron, Home Depot
Cluster 2: JPMorgan Chase, Wal-Mart, Goldman Sachs, Wells Fargo, Ford, IBM
Cluster 3: Microsoft, Caterpillar
Cluster 4: Canon
Cluster 5: Exxon, Cablevision, Xerox, Kimberly-Clark
Cluster 6: Ryder, Kraft Foods, GlaxoSmithKline, Sony, Comcast, Colgate-Palmolive, American express
Cluster 7: Lookheed Martin, Pfizer, Yahoo, Unilever, Marriott, Time Warner, AIG, Honda, Pepsi, General Dynamics, Novartis, ConocoPhillips, Cisco, Walgreen, Coca Cola, DuPont de Nemours, Apple
Cluster 8: Navistar, Procter Gamble, Raytheon, General Electrics, Valero Energy, Northrop Grumman
Cluster 9: Mitsubishi, Texas instruments, SAP, 3M, Mc Donalds, CVS, Boeing, HP
Cluster 10: Toyota


Bibliography:


Forecast Stocks by Logistic Regression, Linear Discriminant Analyser and Quadratic Discriminant Analyser

Forecast Stocks by Logistic Regression, Linear Discriminant Analyser and Quadratic Discriminant Analyser

The below code is for python 3

import datetime
import numpy as np
import pandas as pd
import sklearn

from pandas.io.data import DataReader
from sklearn.linear_model import LogisticRegression
from sklearn.lda import LDA
from sklearn.qda import QDA

def create_lagged_series(symbol, start_date, end_date, lags=5):
    """This creates a pandas DataFrame that stores the percentage returns of the 
    adjusted closing value of a stock obtained from Yahoo Finance, along with 
    a number of lagged returns from the prior trading days (lags defaults to 5 days).
    Trading volume, as well as the Direction from the previous day, are also included."""

    # Obtain stock information from Yahoo Finance
    ts = DataReader(symbol, "yahoo", start_date-datetime.timedelta(days=365), end_date)

    # Create the new lagged DataFrame
    tslag = pd.DataFrame(index=ts.index)
    tslag["Today"] = ts["Adj Close"]
    tslag["Volume"] = ts["Volume"]

    # Create the shifted lag series of prior trading period close values
    for i in range(0,lags):
        tslag["Lag%s" % str(i+1)] = ts["Adj Close"].shift(i+1)

    # Create the returns DataFrame
    tsret = pd.DataFrame(index=tslag.index)
    tsret["Volume"] = tslag["Volume"]
    tsret["Today"] = tslag["Today"].pct_change()*100.0

    # If any of the values of percentage returns equal zero, set them to
    # a small number (stops issues with QDA model in scikit-learn)
    tsret['Today'] = [x if abs(x)>=0.0001 else 0.0001 for x in tsret['Today']]

    # Create the lagged percentage returns columns
    for i in range(0,lags):
        tsret["Lag%s" % str(i+1)] = tslag["Lag%s" % str(i+1)].pct_change()*100.0

    # Create the "Direction" column (+1 or -1) indicating an up/down day
    tsret["Direction"] = np.sign(tsret["Today"])
    tsret = tsret[tsret.index >= start_date]

    return tsret

def fit_model(name, model, X_train, y_train, X_test, pred):
    """Fits a classification model (for our purposes this is LR, LDA and QDA)
    using the training data, then makes a prediction and subsequent "hit rate"
    for the test data."""

    # Fit and predict the model on the training, and then test, data
    model.fit(X_train, y_train)
    pred[name] = model.predict(X_test)

    # Create a series with 1 being correct direction, 0 being wrong
    # and then calculate the hit rate based on the actual direction
    pred["%s_Correct" % name] = (1.0+pred[name]*pred["Actual"])/2.0
    hit_rate = np.mean(pred["%s_Correct" % name])
    print("%s: %.3f" % (name, hit_rate))
    
if __name__ == "__main__":
    # Create a lagged series of the S&P500 US stock market index
    snpret = create_lagged_series("^GSPC", datetime.datetime(2001,1,10), datetime.datetime(2014,12,24), lags=5)

    # Use the prior two days of returns as predictor values, with direction as the response
    X = snpret[["Lag1","Lag2"]]
    y = snpret["Direction"]

    # The test data is split into two parts: Before and after 1st Oct. 2014.
    start_test = datetime.datetime(2014,10,1)

    # Create training and test sets
    X_train = X[X.index < start_test]
    X_test = X[X.index >= start_test]
    y_train = y[y.index < start_test]
    y_test = y[y.index >= start_test]

    # Create prediction DataFrame
    pred = pd.DataFrame(index=y_test.index)
    pred["Actual"] = y_test
    
    # Create and fit the three models    
    print("Hit Rates:")
    models = [("LR", LogisticRegression()), ("LDA", LDA()), ("QDA", QDA())]
    for m in models:
        fit_model(m[0], m[1], X_train, y_train, X_test, pred)


Hit Rates:
LR: 0.576
LDA: 0.576
QDA: 0.593

With all training data in more than ten years, hit rates does not get better never crossing 60%.




Bibliography:


2014-12-24

Install Numpy, Schipy, Matplotlib and etc. on Amazon Linux AWS-ec2 for Python3

Installing NumPy, SciPy, Matplotlib, pandas, scikit-learn and pillow for Python 3.4 on Amazon Linux

You must always specify full paths for python3, pip3 and easy_install-3.4. You can tell a full path by the command, which <file or directory>
常にpython3, pip3, easy_install-3,4はフルパスを指定してください。whichコマンドでフルパスがわかります。

Always use pip3 to install for python 3.
Python 3にライブラリをインストールするには常にpip3を使うこと

About my AWS and Python

$ aws --version
aws-cli/1.6.6 Python/2.6.9 Linux/3.14.25-23.45.amzn1.x86_64

$ python3 --version
Python 3.4.2

Download and instal easy_install

$ cd /usr/local/src
$ sudo wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
$ which python3 # check the full path to python3
/usr/local/bin/python3
$ sudo /usr/local/bin/python3 ez_setup.py

Check easy_install for Python 3.4 installed

Insatall pip for python 3

$ which easy_install-3.4 # check the full path to easy_install 3.4
/usr/local/bin/easy_install-3.4

$ sudo /usr/local/bin/easy_install-3.4 pip

$ which pip3
/usr/local/bin/pip3
$ pip3 --version
pip 1.5.6 from /usr/local/lib/python3.4/site-packages (python 3.4)

Install NumPy for python 3

$ sudo /usr/local/bin/pip3 numpy
$ # also, sudo /usr/local/bin/easy_install-3.4 numpy works fine


Install LAPACK and BLAS

sudo yum install -y lapack-devel blas-devel

Install SciPy for python3

You may need install BLAS and LAPACK on your LINUX , not on  Python. So you do not need specify the python version)

$ sudo yum install blas-devel lapack-devel

$ sudo /usr/local/bin/pip3 scipy

when you fail with the error,
"virtual memory exhausted: Cannot allocate memory",
try the below

$ sudo /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024
$ sudo /sbin/mkswap /var/swap.1
$ sudo /sbin/swapon /var/swap.1

$ sudo /usr/local/bin/pip3 scipy

$ sudo swapoff /var/swap.1
$ sudo rm /var/swap.1


Install Matplotlib

You will install freetype version 2.4 or more and png.

$ sudo apt-get install libpng-devel

$ wget http://download.savannah.gnu.org/releases/freetype/freetype-2.5.3.tar.gz
$ tar xzvf freetype-2.5.3.tar.gz
$ cd freetype-2.5.3
$ ./configure
$ make
$ sudo make install

$ /usr/local/bin/pip3 install matplotlib


Install PIL (Python Image Library)

$ sudo /usr/local/bin/pip3 install pillow

Install Pandas

$ sudo /usr/local/bin/pip3 install pandas 


Install scikit-Learn

$ sudo /usr/local/bin/pip3 install scikit-learn

Install SymPy

$ sudo /usr/local/bin/pip3 install sympy


Install PuLP

$ sudo /usr/local/bin/pip3 pulp

Install Beautiful Soup 4

$ sudo /usr/local/bin/pip3 install beautifulsoup4


Install lxml

$ sudo yum -y install libxslt-devel libxml2-devel gcc python-devel
$ sudo pip install lxml

Install twitter

$ sudo pip install twitter


Install oauth

$ sudo pip install aouth

Install iPython

$ sudo /usr/local/bin/pip3 ipython

Install boto

$ sudo /usr/local/bin/pip3 boto

Finally, check your libraries installed

$ /usr/local/bin/pip3 freeze
Pillow==2.6.1
PuLP==1.5.6
beautifulsoup4==4.3.2
boto==2.34.0
ipython==2.3.1
lxml==3.4.1
matplotlib==1.4.2
nose==1.3.4
numpy==1.9.1
oauth==1.0.1
pandas==0.15.2
pyparsing==2.0.3
python-dateutil==2.3
pytz==2014.10
scikit-learn==0.15.2
scipy==0.14.0
six==1.8.0
sympy==0.7.6
twitter==1.15.0



前回記事 (Previous article about installing python3 on Amazon Linux):

参考記事 Bibliography

2014-12-23

Cygwin on Windows8 でchmodが効かずssh鍵認証ができない

次のようなエラーが出てsshの鍵認証がうまくいかないとき

 @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0660 for 'keyname.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
bad permissions: ignore key: key_aws.pem
Permission denied (publickey).

鍵のpermissionが広すぎるので、自分のみ読み書きできる600に変更する必要がある
cygiwnのバグによって、ファイルやフォルダにグループが設定されていないと、パーミッションを変更できないので、

chgrp -R Users <file or directory>
chmod 600 <file or directory>

として、まずグループをUsersに変更してからパーミッションを変える。
ls -l
でパーミッションが変更されたか確認し、
ssh -i <key.pem> user@domain
で認証すると、今回はec2にログインできた。


       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

December 13-14, 2014 ドイツ ベルリン旅行

December 13-14, 2014

2014-12-18

ジュネーヴ Café du Soleil のチーズフォンデュ

本場ジュネーヴで食べるチーズフォンデュ

CERN出張最終日にはジュネーヴ郊外のチーズフォンデュを食べに行きました。ジュネーヴで食べるチーズフォンデュは二回目 (前回記事: ジュネーヴ Auberge de Savièse チーズ・フォンデュ)

今回は、調べた中で好評のCafé du Soleilへ行った。


Geneva駅からは10分ぐらいバスに乗る。街の中心部からは外れている。

Fondue au Fromage (チーズフォンデュ)を注文。飲み物はなし。まずバゲットが運ばれた。

割りと混むので予約した方がいいと聞いていたが、平日の昼下がりはスムーズに座れた。

国際会議に来ているらしき人たちが英語で話していた。カフェなので、お茶だけ飲んで帰る人も散見された。

 
10分ほど待つとチーズフォンデュが運ばれてきた。27.30CHF。

前回と違い、ワインやアルコールの香りは特にしなかった。

チーズがとてもとても柔らかかった。かき混ぜたら泡が立つかと思うほどだった。 溶けたチーズは弾力を失い、バゲットも容易に鍋底に沈んだ。

胡椒も合う。 バゲットは一度お代わりしたところで、チーズがなくなった。満腹になり、夕飯は要らなかった。

Bal-air駅から望むレマン湖にオブジェがあった。

  1. Café du Soleil

  2. カフェ
  3. 住所: Place du Petit-Saconnex 6, 1209 Genève
    営業時間:

    月曜日7時00分~0時00分
    火曜日7時00分~0時00分
    水曜日7時00分~0時00分
    木曜日7時00分~0時00分
    金曜日7時00分~0時00分
    土曜日10時00分~23時45分
    日曜日10時00分~23時00分
サイトTripAdvisor

Café du Soleilの行き方


Cornavin駅/Geneva駅前のバス停4番ホームからGardiolに乗り、Petit-Saconnexで降りる。約10分の乗車。
降りたら、坂を登ったところにお店が既に見えている。
Cornavin - (Bus no.3) - Petit-Saconnex

2014-12-11

孫正義という人

かっこいいね。ビジョンに向かって自分の人生を全うしようとしていて。なかなかそんな生き方できない。覚悟が座らない。自分がやるべきことだと思ってやれず、何となく就いた仕事や紹介されたものに乗っかって生きてたら時間が過ぎていくのだよな。

「下位10パーセントは自動で退学」 孫正義氏の後継者を争うサバイバルレース、ソフトバンクアカデミアの苛酷さ

2014-12-10

December 6-7, 2014 ハンガリー ブダペスト旅行, Budapest, Hungry

December 6-7, 2014 in ブダペスト
セーチェーニ温泉でチェスをする人々

Amazon Linux (AWS) ec2にPython3をインストール

Aamazon Web Service ec2 に Python3 をインストールする


何度もインストールが不完全に終わりましたが、やっとできた。
ec2にはデフォルトで 2.6.9 がインストールされています。
LINUXは初心者。
AWS (LINUX Server) にsshでログインした後の話です (WindowsOS使ってるのでcygwinで入りました)。
現在、最新のversionであるpython3.4.2をインストールしました。
今後のために覚書しておきます。
sudo は管理者権限でも実行コマンドです。これがないと Permission deniedが返ってきました。

コマンド

sudo wget http://www.python.org/ftp/python/3.4.2/Python-3.4.2.tgz
sudo tar zxvf Python-3.4.2.tgz
cd Python-3.4.2
sudo ./configure
sudo yum install gcc
sudo make
sudo make install
export PATH=$PATH:/usr/local/bin/python3

できた

$ python3
Python 3.4.2 (default, Dec  9 2014, 18:54:09)
[GCC 4.8.2 20140120 (Red Hat 4.8.2-16)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

2014-12-09

Windows7(64bit) C++コンパイラーを入れる

Pythonのモジュール、Cython, numba, MeCabなどのためにC++コンパイラーが必要だったのだが、難しすぎた。先週いっぱい使ったが不可能なのか。Pythonを64bitから32bitにインストールし直したが、うまくいかなかった。

Pythonコミュニティでも議論して様々に話されているが、結論が出ていなかったりする。
Visual Studio ExpressやSDKやService Pack1や、SP1の拡張版など、適切な順番と設定でインストールしなければならないらしく、またパスも設定しなければならないらしい。というのも、新たにインストールしたものが、既存の大事なファイルを消してしまったりするからだ。いくつかのページに書いてある通りに試したが、うまくいかない。やるたびに新しいエラーに出会う。

くっそー。諦めモード。

2014-12-04

フランスでチーズ・フォンデュ作った

チーズ・フォンデュを料理した



せっかくフランスにいるのだから、チーズ・フォンデュを作ってみることにした。チーズ溶かすだけだし、外で食べるより安いだろうし、ノウハウ身につけようということで。

2014-12-02

November 30, 2014 ベルギー ブリュッセル半日旅行記 (日帰りアムステルダムの後) brussels belgium

November 30, 2014
29日の早朝にジュネーヴを出て、朝7時頃にブリュッセル着いたが、すぐにアムステルダムに向かった。そして、夜中11時にアムステルダムから戻った。およそ無計画な旅行で、ホテルは取ってなかった。野宿するつもりだった。しかし、予想外の寒さだった。

ブリュッセル中央駅で泊まろうとしたら、0時45分にはゲート締めると駅員に言われた。駅付近のホテルは安くて1900EURO (2.8万円)もする。それでも凍え死ぬよりはマシかと思ったが、全て満室だった。

駅で19歳のシンガポール出身の女性バレリーナと話した。かっこよい人だった。16歳でロンドンにバレエ留学。飛び級して、周囲が大学に入る頃に大学を卒業。現在はコンテンポラリー・バレエをやっていると話していた。「バレエ学校というのは世界各地から生徒が来ている。だから私にはヨーロッパ各地に友達がいる。だからホテル泊まらなくても行く先々で友人の家に泊まれる。」と話していたが、よくわからなかった。バレエ学校の人はバレエ学校の近辺に住んでいるんじゃないのか。卒業生の友人のことだろうか。それにしても、国際感覚が豊かだ。すばらしい。彼女の生き様はバレエで世界のどこでも生きていけることを証明しているようだった。

夜中のブリュッセル。中央駅から歩いて5分ほどのBouse駅付近。

November 29, 2024 オランダ アムステルダム六時間旅行記 Amsterdam, Holland

November 29, 2024
ブリュッセル二日間の予定を変更して、一日目はブリュッセルから日帰りでアムステルダム来ることにした。

高速列車タリスだと1'53、70EUROでブリュッセルとアムステルダムを結ぶ。ブリュッセル空港のおばさんに安くしたいと話したら、タリスではないが片道2'30、往復50EUROほどで切符を手配してくれた。40分ぐらい列車時間がのびても構わなかった。

アムステルダム中央駅の隅っこでジャズ弾いてる青年がいた。

中央駅。 オランダは歩いて回れると聞いてたので、路面電車トラムにも乗らずに過ごした。街なかを散策するのも楽しい。

CERNレストラン2

最近は曇り空の元気のない天気が続く。CERNの食堂は夏にも書いた気がする: http://naokiwatanabe.blogspot.com/2014/09/cern_55.html
レストランは2つあり、いずれも今日の料理コーナーや、ベジタリアンメニュー、パスタ、ピザなども用意されてるが、8-12CHFもする。肉料理は15CHFなど。なので、行くときはビュッフェコーナーで安く済ませるよう努めてる。スイスフラン (CHF) は2014年12月1日現在で122円だ。

今日は、朝ごはんを食べそこねたので、来てみた。ちなみに、レストランは1と2の二箇所があるので、今日の昼に来たのはレストラン2。なので、タイトルが若干紛らわしい。レストラン記事2枚目なのか、レストラン2の記事なのか。前回の記事もレストラン2だったので。。


食堂の二階。一階にもパスタやピザなどある。写真の右側がビュッフェコーナー。


フランスの家庭料理っぽいものが並ぶ


サーモンとハムを多めにとった。グラム計算なのだが、これでだいたい8CHFだった。

2014-12-01

[Python] scikit-learn 機械学習入門

scikit-learnの超入門

チュートリアルの最初を理解するのに時間かかったので、覚書のためにも書いておく。

sklearnには既にサンプルとして、数字の認識のテスト問題と答えが入っている。
サンプルのSVM (Support Vector Machine) で学習させ、ペイントで雑に描いた下の数字を判断させる。

上の画像は9のつもりで描いた。最初は横長だったので、サイズを8x8 pixelsの正方形に変形した。歪になった。機械学習はこれをちゃんと9として判断してくれるだろうか。

コード

from sklearn import datasets
from sklearn improt svm
from PIL import Image
digits = datasets.load_digits()
clf = svm.SVC(gamma=0.001, C=100.)
clf.fit(digits.data, digits.target)
img = Image.open(r'Path\to\Image.png')
rgb = list(img.getdata())
len(rgb) # 64
lum = [0.299*i[0]+0.587*i[1]+0.114*i[2] for i in rgb]
len(lum) # 64
clf.predict(lum) # array([1])

import numpy as np
import matplotlib.pyplot as plt
lum = np.array(lum)
lum.shape = 8,8
plt.imshow(lum)
plt.colorbar()
plt.show()


SVMの学習と予想

1-3行目はライブラリのimport。
4行目はscikit-learnにもとから入ってる数字群を呼び出した。
64の配列と、それに対応した数字が1797セット入っている。
もともと、上のような荒っぽい上のような画像と対応する数字(target)が1797セットある。画像の方は、8x8ピクセルあり、白黒なので、64ピクセルそれぞれの輝度0-16を一列に並べた、長さ64の配列が1797あることで1797枚の画像を表現している。
5行目はSVMを呼び出し。こんなのが出てくる。

 SVC(C=100.0, cache_size=200, class_weight=None, coef0=0.0, degree=3, gamma=0.001, kernel='rbf', max_iter=-1, probability=False, random_state=None, shrinking=True, tol=0.001, verbose=False)
6行目は、各成0-16,で長さ64の配列と、対応する数字のペア1797個を学習させてる。
7行目は画像ファイルを呼び出し。今回の画像は自分で描きました。
8行目は画像ファイルのrgbを呼び出した。rgbは、[(r, g, b), (r, g, b), ..., (r,g,b)]というように、各ピクセルごとにタプルになって読み込まれる。
9行目。縦横8ピクセルずつなので、64の長さです。それぞれ3タプルあります。
10行目はLuminosity = 0.299R + 0.587G + 0.114B の 公式に従って、各ピクセルの輝度を読み込む。今回は白黒画像なのでR=G=Bなのだが、汎用性や後学のため。
11行目はlumの長さ。8x8サイズの白黒画像の輝度が64個入ってます。
12行目は学習したSVMで読み込んだ画像の数字を認識。9ではなく1になってしまった。

輝度から画像を表示

16行目でlistをnumpy.arrayに変換
17行目で64の長さの配列を8 x 8サイズに折り曲げる
18行目でカラーマップ作成。引数にcmap = cm.Greys_rを持たせると、グレースケールのマップになる。
plt.imshow(lum, cmap = cm.Greys_r)
19行目はなくてもよいが、ないと画像横のバーが出てこない。

参考文献



アクアリウムはじめました

通りすがりのアクアリウムショップで、ボトルアクアリウムを衝動買いしました(2月5日)。アカヒレ二匹がいます。コンラッド・ローレンツが『ソロモンの指輪』の中でアクアリウムをおすすめしていたので、試してみたかったのです。今回が初めてのアクアリウムなので簡単なものにしたく、また手間をか...