まさなみブログ

主にweb系開発の記事を適当に書いてます。

Pythonではじめる機械学習で機械学習を学習してみた  ~~第1章~~

・疎行列、CRS形式とは?

疎行列とは要素のほとんどが0の行列のこと。機械学習をしていると、疎行列が頻出するだとかなんとか。
0ばかりで埋め尽くされたデータでメモリを食われるのはもったいないよねってことで、
0以外の要素が入っているところをピックアップして表示する形式のうちの一つがCRS形式。他にもCOO形式などがあるらしい。詳しくは下記参照。
www.jicfus.jp

・sparse.csr_matrix(array)
NumPyの2次元配列を疎行列のCSR形式に変換。


・numpy.linspace(start, stop, num = 50, endpoint = True, retstep = False, dtype = None)
returns: ndarray
等差数列を作成する関数。numは配列の要素数


・IPython.display.display(data)
from IPython import display
上記import文でdisplay(data)を使用すると以下のエラーが発生。
TypeError: 'module' object is not callable

調べてみると、display関数はIPython.displayモジュールのdisplay関数らしい。import文を下記に修正して解決。
from IPython.display import display


・pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
二次元配列のクラス。表形式でindex、column等を指定できる。
deepage.net


・string[n-1:n'-1]
stringのn文字目~n'文字目までを取得。[-1]で一番後ろの文字。
Python文字列操作マスター - Qiita


・NumPy.array.shape
配列の要素数を表す関数。reshape(n,n')で配列の再編成。

IN:
array = np.array([[1,2,3],[4,5,6],[7,8,9],[10,11,12]])
print(ary.shape)
print(array.reshape(6,2))

OUT:
(4, 3)
array([[ 1,  2],
       [ 3,  4],
       [ 5,  6],
       [ 7,  8],
       [ 9, 10],
       [11, 12]])

deepage.net


・train_test_split(arrays*, options**)
return: X_train, X_test, Y_train, Y_test***
学習データとテストデータをランダムに分ける関数。
*arraysには同じ配列長の複数のarrayを指定可能
**今回はrandom_state=0 を指定
***指定配列2個の場合
newtechnologylifestyle.net


・pandas.plotting.scatter_matrix(...)
pandas.pydata.org

・k-最近傍法

 特徴が最も近い訓練データを訓練セットから探し、データを予測する方法。
KNeighborsClassifierクラスを使用。以下サンプル。

knn = KNeighborsClassifier(n_neighbors=1) #近傍点を1としたクラスを作成。
knn.fit(X_train, y_train) #訓練データをセット
print(knn.score(X_test, y_test)) #テストデータを使ってモデルの評価
knn.predict(X_new) #モデルを使って実データを予測

qiita.com

Pythonではじめる機械学習で機械学習を学習してみた  ~~第0章~~

機械学習に触れるきっかけ

 職場で機械学習を始めよう!!みたいな動きがあって、社内の勉強会に参加する機会がたびたびあり、参加してみたところ結構おもしろそうだったので勉強することにしました。
 タイトルにもある以下の本を入門書として勉強を始めることにしました。
Pythonではじめる機械学習 中田秀基著 

 とりあえずこのブログでは学習にあたり、つまったところや調べもののリファレンス替わりにできればいいなと思います。ほぼ自分用。随時更新します。

■事前知識

 ちなみに、現在の私の機械学習についての知識についてですが、以下に挙げる本を読みました。それ以上の知識はございません。
人口知能は人間を超えられるか 松尾豊著

いちばんやさしい機械学習プロジェクトの教本 韮原祐介著

どちらも一般向けで機械学習の現状や実用化について分かりやすく書かれておりおすすめです。
ちなみにpythonは未学習だったため、以下の本で1か月ほど勉強しました。多分基礎はできているかと思います。
・ゲームを作りながら楽しく学べるPythonプログラミング 田中家日郎著
amazon kindleで無料のわりに分かりやすく、サンプルコードもついている良本です。
 

■環境

Windows 10 64bit
Python 3.7.1
Anaconda 2018.12

■インストール編

 開発環境にはAnaconda を使用。pythonの勉強でpygameのライブラリが使えていたので、インストールされてるほかのやつも問題なく使えるだろうと思っていたがNumPyのimportでさっそくこんな感じのエラーが出た。

Traceback (most recent call last):
File "C:/Users/{hoge}/dev/workdir/AI_study/test.py", line 1, in <module>
import numpy as np
File "C:\Users\{hoge}\Anaconda3\envs\defenv\lib\site-packages\numpy\__init__.py", line 140, in <module>
from . import _distributor_init
File "C:\Users\{hoge}\Anaconda3\envs\defenv\lib\site-packages\numpy\_distributor_init.py", line 34, in <module>
from . import _mklinit
ImportError: DLL load failed: 指定されたモジュールが見つかりません。

Process finished with exit code 1

上記はvsCodeで書いたコードを実行した際に生じたエラー。anaconda promptで同様のコードを実行すると問題なくうまくいった。
色々調べたところ、原因はNumpyにpathが通っていないことでした。Anaconda導入時にC:\Users\{hoge}\Anaconda3\Library\binにpathを通していなかった。
note.nkmk.me
上記サイトを参考に、sys.path.append(... を使ってモジュールへのpathを通したがなぜかうまくいかない。。。

しょうがないので環境変数にpathを追加しました。現状仮想環境の使い分けをする必要も特にないので、とりあえずこのまま進めます。
うーん、後でまたこの問題と直面するんだろうなあ。いったん解決。

 次回から本格的に学習に入っていきます。(たぶん…)