読者です 読者をやめる 読者になる 読者になる

メモランダム!!

自分用の端書のため,他の人が読めるようには書いていません.悪しからずm(_ _)m

カーネル関数の使い方色々:scikit-learn

scikit-learn Python3.X

Pythonのscikit-learnを色々使ってみたのでメモ書きしておきます.いやぁ,今までJavaで一生懸命書いてましたが,やっぱりPythonだと楽でいいですね~.

基本編

まずは最初につまずいた所.

import numpy as np
from sklearn.metrics import pairwise

x = np.array([1, 1]) #([[1, 1]])じゃないとだめ

print(pairwise.rbf_kernel(x))

と書くと,

DeprecationWarning: Passing 1d arrays as data is deprecated in 0.17 and will raise ValueError in 0.19. Reshape your data either using X.reshape(-1, 1) if your data has a single feature or X.reshape(1, -1) if it contains a single sample.

と言う具合に「データとしての1次元配列の受け渡しは0.17で廃止されました」と言われます.なので,ベクトルを使う場合はコメントに書いたみたいに明示的に列が一次元であることを書かないと駄目みたいです.

ガウシアンの動径基底関数

ドキュメントは下記の通り

動径基底関数はなんぞや?という話は次の通り

実際に使ってみるとこんな感じです.

import numpy as np
from sklearn.metrics import pairwise

x = np.array([[1, 1]])
y = np.array([[2, 2]])

print(pairwise.rbf_kernel(x,y))

と書くと

[[ 0.36787944]]

 {k\left( x,y \right) =exp\left( -\gamma \left\| \mathbf{x}-\mathbf{y} \right\|  \right) 
}

物の本を読むと{ \gamma ={ 1 }/{ 2{ \sigma  }^{ 2 } } 
}らしいのですが,このライブラリの場合はなにもしないと{ \gamma ={ 1 }/{ (\mathbf{x}の要素数) } 
}らしいです.なので{ exp\left\{ { -1 }/{ 2 }\left( { 1 }^{ 2 }+{ 1 }^{ 2 } \right)  \right\} =0.36787944\cdots  
}

線形カーネル

ドキュメントはこちら
sklearn.metrics.pairwise.linear_kernel — scikit-learn 0.18.1 documentation

書いてみるとこんな感じ

import numpy as np
from sklearn.metrics import pairwise

x = np.array([[1, 1]])
y = np.array([[2, 2]])

print(pairwise.linear_kernel(x,y))

これは単純なのですぐわかると思います

[[ 4.]]


きょうはこんな感じで

PyCharmの64Bitをインストールする

問題点

PyCharmをインストールしようとしたら32Bitのlauncherしか出ない.

解決方法

stackoverflow.com
ここにも書いてあるように64BitのJDKをインストールする

Pandasでmatplotlibみたいに描画する

これまでPandasとmatplotlibを一緒に使う機会がなかったんですが,Pandasにも描画機能があります.しかもこれが結構便利!とうことで早速使ってみたので,ログとして残しておきます.

import pandas as pd
import pylab
import matplotlib
import matplotlib.pyplot as plt

plt.style.use('ggplot') # ggplotを使う
font = {'family' : 'meiryo'} # フォントをメイリオにする
matplotlib.rc('font', **font) # 

# データフレームの定義
df = pd.DataFrame({'Time': ['10:00:00', '10:00:01', '10:00:02', '10:00:03', '10:00:04','10:00:05', '10:00:06', '10:00:07', '10:00:08', '10:00:09'],
                   'Value1': [25, 30, 104, 52, 41, 91, 102, 40 ,101 ,97],
                    'Value2': [45, 19, 34, 19, 78, 148, 45, 53 ,74 ,32]})

# サイズの変換
pylab.figure(figsize=(9, 6))

# グラフを描く
df.plot()

# 画像ファイルの保存
plt.savefig("image.png")

f:id:shu10038:20170226084921p:plain






    
  

データフレームからarrayに変換:pandas numpy

機械学習のライブラリなどを使おうとすると,データフレーム型からnumpyのarray型にしないと引数として渡せない場合があります.このデータフレームからarrayに変換する方法は色々あるんですが,一番簡単なのはas_matrix()を使うことでしょうか.

In [102]: import pandas as pd # pandasをインポート

In [103]: import numpy as np # numpyをインポート

# データフレームを定義する
In [104]: df = pd.DataFrame({'Time': ['10:00:00', '10:00:01', '10:00:02', '10:00:03', '10:00:04','10:00:05', '10:00:06', '10:00:07', '10:00:08', '10:00:09'],
     ...:                    'Value1': [25, 30, 104, 52, 41, 91, 102, 40 ,101 ,97],
     ...:                     'Value2': [45, 19, 34, 19, 78, 148, 45, 53 ,74 ,32]})

# データフレームの中身を確認する
In [105]: df
Out[105]: 
       Time  Value1  Value2
0  10:00:00      25      45
1  10:00:01      30      19
2  10:00:02     104      34
3  10:00:03      52      19
4  10:00:04      41      78
5  10:00:05      91     148
6  10:00:06     102      45
7  10:00:07      40      53
8  10:00:08     101      74
9  10:00:09      97      32

# .as_matrix()を呼び出す
In [106]: array = df.as_matrix()

# arrayに変換されたかを確認する
In [107]: array
Out[107]: 
array([['10:00:00', 25, 45],
       ['10:00:01', 30, 19],
       ['10:00:02', 104, 34],
       ..., 
       ['10:00:07', 40, 53],
       ['10:00:08', 101, 74],
       ['10:00:09', 97, 32]], dtype=object)

こんな感じ

Pathを通した先のファイルの読み書きがおかしくなる

Python3.X

teratailのフォーマットが見やすいので,真似して書いてみます.

前提・実現したいこと

Pythonの3系を使っているのですが,どうやら開発環境のワークスペースを変えるとファイルを読むときにはワークスペースからパスを通さなくてはならないらしいです.なのでパス+ファイル名みたいな書き方をしていたのですが,エラーが出てしまいます.

発生している問題・エラーメッセージ

たとえば

path = 'ファイルまでのパス'

df = pd.read_csv( path + 'ファイル名.csv')

と書くと

File b'ファイルまでのパス\\ファイル名.csv' does not exist

という具合に何故か\\(円マークもしくはバックスラッシュが2つならんでしまします)

またグラフを出力しようとすると,'path'の後ろの文字列とつながってしまって'末尾の円マーク以降の文字列+「ファイル名」'みたいになってしまいます.

解決策

色々試してみましたが,作業ディレクトリを変えるのが一番早いと思います.

import os

# pathの設定
os.chdir("作業しているフォルダ名")

Jupyter Notebookの設定を色々変えてみる

PythonといえばSpyderを使ったりJupyter Notebookをしてますが,Jupyter Notebookの方はフォントが気に入らなかったりします.そこでnbextensionsをつかって色々いじってみたんですが,忘れそうなのでこのブログにメモしておきます.

ちなみにAnacondaはAnaconda 4.3.0 For Windowsを使っています.

ダウンロードは下記のサイトからしました.
GitHub - ipython-contrib/jupyter_contrib_nbextensions: A collection of various notebook extensions for Jupyter

ダウンロードというかここのサイトに書いてあったとおりにやっただけなんですけどね~

最初は404 errorが出てしまいましたが,「conda install -c conda-forge jupyter_contrib_nbextensions」と入力したらうまくいきました!