Pythonでargmaxとかargmin
argmaxとargminについて書いてあるようなタイトルですが,本記事ではargmaxのみです.argminも使い方は同じなので書いてません.
まずは配列を用意します.
In [8]: import numpy as np In [9]: a = np.array([[1,2,3],[4,5,6],[7,8,9],[2,8,2]])
あとはご覧の通り
In [10]: a.argmax(axis=0) Out[10]: array([2, 2, 2], dtype=int64) In [11]: a.argmax(axis=1) Out[11]: array([2, 2, 2, 1], dtype=int64) In [12]: a.argmax() Out[12]: 8
sum()とsum(1)は何が違うのか??:Python,NumPy
全部足すか列ごとに足すかの違いでした~
In [46]: import numpy as np In [47]: A=np.array([[ 2,4,6.], ...: [ 4,8,12.], ...: [ 6,12,18.]]) In [48]: A.sum() Out[48]: 72.0 In [49]: A.sum(1) Out[49]: array([ 12., 24., 36.])
カーネル関数の使い方:scikit-learn
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で廃止されました」と言われます.なので,ベクトルを使う場合は一次元の列であることを書かないと駄目みたいです.
線形カーネル
検算が簡単そうな線形カーネルから試してみたいと思います.
リファレンスはこちら
sklearn.metrics.pairwise.linear_kernel — scikit-learn 0.19.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になるはずです.
出力結果 [[ 4.]]
と狙い通りになりました.
データが多次元だったら
実際のデータは,例えば2次元のデータならば という具合になるわけです.
ではデータが多次元の場合はどうなるでしょうか??
import numpy as np from sklearn.metrics import pairwise x = np.array([[1, 1],[2, 2],[3, 3]]) print(pairwise.linear_kernel(x))
と書くと出力結果はこうなります
出力結果 [[ 2. 4. 6.] [ 4. 8. 12.] [ 6. 12. 18.]]
これって例えば とあったら,上の行は ,,と計算しているみたいで,上から二段目の行は ,,と計算しているみたいです.3行目も同じようです.
ガウシアンの動径基底関数
ドキュメントは下記の通り
動径基底関数はなんぞや?という話は次の通り
実際に使ってみるとこんな感じです.
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]]
物の本を読むとらしいのですが,このライブラリの場合はなにもしないとらしいです.なので
きょうはこんな感じで
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")
v
データフレームから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)
こんな感じ
2020/3/6追記
as_matrixはどうやら無くなるみたいですね.
FutureWarning: Method .as_matrix will be removed in a future version. Use .values instead.
とのこと.なので代わりに
df.values.tolist()
を使いますかな.
Pathを通した先のファイルの読み書きがおかしくなる
teratailのフォーマットが見やすいので,真似して書いてみます.
前提・実現したいこと
Pythonの3系を使っているのですが,どうやら開発環境のワークスペースを変えるとファイルを読むときにはワークスペースからパスを通さなくてはならないらしいです.なのでパス+ファイル名みたいな書き方をしていたのですが,エラーが出てしまいます.
発生している問題・エラーメッセージ
たとえば
path = 'ファイルまでのパス' df = pd.read_csv( path + 'ファイル名.csv')
と書くと
File b'ファイルまでのパス\\ファイル名.csv' does not exist
という具合に何故か\\(円マークもしくはバックスラッシュが2つならんでしまします)
またグラフを出力しようとすると,'path'の後ろの文字列とつながってしまって'末尾の円マーク以降の文字列+「ファイル名」'みたいになってしまいます.