新たに学習したことと思ったことをつらつらと

とある大学院生が生きてて学んだことや考えたしょうもないことを書くブログ

機械学習入門

機械学習入門

機械学習人工知能とは

ここ数年AI(Artifical Inteligence)という言葉が様々な箇所で現れるようになってきたが、そもそもAI/人工知能とはなんなのか
また、機械学習人工知能は同じなのであろうか
人工知能という言葉を初めて使用したジョン・マッカーシーによると人工知能は以下の意味らしい
また、機械学習の定義として有名なのが計算機科学者 アーサー・サミュエルによるものらしい

  • 人工知能:“知的な機械、特に、知的なコンピュータプログラムを作るための科学技術”
  • 機械学習:"コンピュータに明示的にプログラムすることなく学習する能力を与える研究分野"

機械学習人工知能の部分集合という理解でいいらしい
人工知能において機械学習以外にもルールベースがある

  • ルールベース:人間が記述したルールをもとに判断するAI

機械学習とは

ひと口に機械学習といっても分類がある
基本的には3つ

  1. 教師あり学習:入力、出力データから予測モデルを開発する
  2. 教師なし学習:入力データのみからデータをグループ化する
  3. 強化学習:試行錯誤を通じて「価値を最大化するような行動」を学習する

教師あり学習はさらにクラス分類問題と回帰問題にさらに分かれ、教師なし学習クラスタリングや次元圧縮などに分かれていく

Pythonによる機械学習

機械学習を行う際にはよくPythonが用いられる
機械学習に用いらるライブラリは以下のものがある

  • Numpy:配列の数値計算を行うライブラリ
  • Pandas:表形式のテーブルデータを扱うライブラリ
  • Matplotlib:グラフ描写や統計量の可視化などを行うライブラリ
  • scikit-learn:機械学習モデルを構築・評価するライブラリ

他にも画像を扱うためにライブラリであるPillowやテキストデータを扱うライブラリのMecabJanomeなどがある

Numpy

公式ドキュメント

Numpyは配列データを高速に操作・計算することが得意なライブラリ
配列とは情報を記憶するための箱が複数が連なっているもの

基本的な操作
  • 1次元配列を生成
array1 = np.array([0,1,2])
  • 連番整数の1次元配列を生成 , ()内は要素の個数
array2 = np.arange(24)
  • reshape()を用いて配列の構造を変更
#1次元配列を2次元に整形
array3 = array2.reshape(4,6)
  • 配列の連結(行方向)
np.concatenate([array1,array2],axis=0)
  • 配列の連結(列方向)
np.concatenate([array1,array2],axis=1)
  • 配列の分割
np.split(array,3)
array.sum() #合計値
array.mean() #平均値
array.min() #最小値
array.max() #最大値

とりあえずこんな感じ

Pandas

公式ドキュメント

pandasはテーブルデータの操作が得意なライブラリで集計、統計処理などの分析業務で頻出のデータ処理が簡単にできる
また機械学習モデルの設計においてデータの前処理、特徴量設計に用いられる

numpyで高速処理をするためにpandasで処理できる形に整形する

基本的な操作
  • csvの読み込み
df = pd.read_csv('data.csv', sep=',')
  • データの最初の数行を確認,()内に数字を入ればその行数表示できる
df.head() #()内が空欄だと5行
  • データの最後の数行を確認
df.tail()
  • 列を追加
df['列名']=[データ(カンマ区切り)]
  • 列の削除
del df['列名']
  • データを細かく表示
df.iloc[1:4] #2行目から4行目の前まで
  • 一意の項目を取得する
df['列名'].unique()
  • 欠損値を調べる
# 欠損値を含むか
df.isnull().any()

# 欠損値をどのくらい含むか
df.isnull().sum()
  • 欠損を含む行を抽出
df[df.isnull().any(axis=1)].head()
  • 欠損地を置き換える
df.fillna(置き換える値)
  • データの結合
結合df = 主df .join (従df ,on条件)

Matplotlib

公式ドキュメント

データの可視化によく用いられるライブラリ
matplotlibがパッケージ全体
pyplotはそのモジュール、スクリプトで作図するときに使う
pylabのimportは推奨されてない模様、インタラクティブな作図にはこっちを使うらしい(よくわからん)

  • グラフを書く
plt.plot()
  • 散布図
df.plot.scatter()


scikit-learnを用いて実際に機械学習するのはまた次回