Python メモ

## Pythonについて
### Python
- Pythonはインタープリタ型の高水準汎用プログラミング言語である。
- Pythonは動的に型付けされていて、ガベージコレクションされている。 
- [公式サイト](https://www.python.org/)
- [GitHub](https://github.com/python)

## Pythonフレームワークについて
### Django
- Djangoは、Pythonで実装されたWebアプリケーションフレームワーク。 
- MVCデザインパターンに緩やかに従う。
- [公式サイト](https://docs.djangoproject.com/ja/3.1/)
- [公式ドキュメント](https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django)

### Flask
- Flask(フラスク)は、プログラミング言語Python用の、軽量なウェブアプリケーショ ンフレームワークである。
- Flask自身は、他のフレームワークがしばしば持っているような、データベース抽象化レ イヤやフォーム値の検証などの機能を持たない。 
- [公式サイト](https://flask.palletsprojects.com/en/1.1.x/)

### Jinja 
- Jinjaは、Djangoのテンプレートをモデルにした、Python用のモダンでデザイナーフレ ンドリーなテンプレート言語です。 
- オプションのサンドボックステンプレート実行環境を使用すると、高速で広く使用され安全です。
- [公式サイト](https://palletsprojects.com/p/jinja/)

### Tornado 
- 非同期通信などのリアルタイム通信に強いフレームワークです。
- 「WebSocket」がサポートされています。利用シーンによっては非常に高速に動作す るフレームワークです。
- [公式サイト](https://www.tornadoweb.org/en/stable/#)

### Bottle
- ボトルは、Python用の高速でシンプルかつ軽量なWSGIマイクロWebフレームワーク です。
- Python で Web アプリケーションを作成するためのフレームワークの中では最もシン プルなフレームワークです。
- 「bottle.py」という1つのファイルだけで構成されています。 
- [公式サイト](https://bottlepy.org/docs/dev/)
- [公式ドキュメント](https://bottl-translate-ja.readthedocs.io/en/latest/01_1_tutorial.html)

### FastAPI
- FastAPIは、Python 3.6以降でAPIを構築するための最新の高速Webフレームワークです。
- Node.jsやGo言語に匹敵する高速なアプリケーションを開発できる。
- Pythonフレームワークの中では最も高速です。
- 少ないコード量で実装できる。
- 直感的に操作できる。
- 構造が簡単で、学習コストが低い。(Flaskの影響を受けている)
- [公式サイト](https://fastapi.tiangolo.com/)

## ディストリビューションライブラリ
### Anaconda
- Python Anacondaは、Pythonのディストリビューション(distribution)です。ディストリビューションとはコンパイルしてある設定済みのソフトウェアの集合体を指します。 
- Anacondaを利用してPythonの開発環境を導入することで、手間のかかるインストー ル作業や細かな設定などの環境構築にかかる時間を短縮し、よく使うライブラリやツール をまとめてインストールすることができます。
- Pythonの開発環境やエディターも同時にインストールできるため、機械学習などで必要 なツールやライブラリのほとんどがAnacondaからセットアップできます。
- Anacondaは データサイエンス、機械学習などの開発でメジャーなツールが多数含まれ、インストール 後すぐにAIやディープラーニングについて学習したり開発することができます。
- また、AnacondaにはPythonと並んで機械学習で有名なR言語も含まれているので、 PythonとR言語の両方を使いたい人にも便利なディストリビューションです。
- [公式サイト](https://www.anaconda.com/)

## IDEライブラリ
### Spyder 
- SpyderはPythonの統合開発環境(IDE)で、Pythonの開発、実行、デバッグといった 機能が充実しています。
- [公式サイト](https://www.spyder-ide.org/)

### Jupyter Notebook
- Jupyter NotebookはPythonのプログラムをWebブラウザ上で動かすことのできるツールで、ノートブックと呼ばれるファイルにプログラムや説明の文章、実行結果などをまとめて管理します。
- 実行結果を記録しながらデータの分析作業を進めることができるため、データサイエンティストには必須といえるツールです。
- [公式サイト](https://jupyter.org/)

## テストライブラリ
### PyTest
- 単体テスト、統合テスト、エンドツーエンド テスト、機能テストなど、さまざまな種類のソフトウェア テストを作成するために使用できます。
- [公式サイト](https://docs.pytest.org/en/7.4.x/)

## 人工知能チャットボットライブラリ
### ChatGPT
- OpenAIが2022年11月に公開した人工知能チャットボットです。
- [公式サイト](https://openai.com/blog/chatgpt)

### GPT4
- GPT-4とは、OpenAIによって開発されたマルチモーダル大規模言語モデルです。2023年3月14日に公開されました。
- 自然言語処理にTransformerを採用しており、教師なし学習によって大規模なニューラルネットワークを学習させ、その後、人間のフィードバックからの強化学習を行っています。
- [公式サイト](https://openai.com/research/gpt-4)
			 
### GPT3
- GPT-3は、2020年に発表された自己回帰型の言語モデルで、ディープラーニングにより人間のようなテキストを生成します。
- プロンプトとして最初のテキストを与えると、そのプロンプトを継続するテキストを生成します。 
- [公式サイト](https://openai.com/research/gpt-4)
			 
### DALL-E 
- "prompts"と呼ばれる自然言語の記述からデジタル画像を生成する、OpenAIにより開発された深層学習モデルです。
- 2021年1月のOpenAIによるブログの投稿により明らかにされ、GPT-3の画像生成のために変更されたバージョンを使用します。
- [公式サイト](https://openai.com/dall-e-2)

### Google Bard
- Googleが開発･提供している会話型人工知能チャットボットです。
- [公式サイト](https://bard.google.com/chat/2bdb2aab2b65ca75)

### Microsoft Bing
- Microsoftが開発･提供している会話型人工知能チャットボットです。
- [公式サイト](https://www.microsoft.com/ja-jp/bing?form=MA13FV)

## 基礎処理ライブラリ
### NumPy(ナンパイ) 
- NumPyとは、数値計算を行うための定番ライブラリの1つで、機械学習だけでなく、多言語配列や画像処理/音声処理にも活用できる利用頻度の高いライブラリです。 
- NumPyは数値計算の中で、特に配列処理能力に優れています。
- Pythonでも計算することは可能ですが、インタプリタ型のプログラミング言語のため、 実行速度が遅く処理に時間がかかります。
- NumPyはC言語やFortranといったコンパイル型言語で実装されているため、処理速度が高速です。 
- Python本体と、Pythonでよく利用されるライブラリをセットにしたパッケージである 「Anaconda」に標準搭載されています。 
- [公式サイト](https://numpy.org/)

### Pandas(パンダス) 
- Pandasは、数表および時系列のデータ操作やデータ構造を変更するなど、テーブルデ ータを取り扱えるようにするライブラリです。
- R言語は、統計分析に特化したプログラミング言語で、ベクトル処理やデータ分析、グ ラフによる可視化ができます。
- Pandasは、NumPyで作成されたデータの加工や入出力が可能です。 
- 数値以外のデータ処理を行う場合にPandasを使うと便利です。 
- SQLと似た操作でデータ加工が行えるためデータベースを触っている人は使いやすいで す。 
- また、値に対するラベル付けを簡単に行えるため、機械学習の前処理などの工程を効率 的に行うことができます。 
- Numpyと同じく、Pythonパッケージである「Anaconda」に搭載されています。 
- [公式サイト](https://pandas.pydata.org/)

### SciPy(サイパイ)
- SciPyは、信号処理や統計などの科学計算用のライブラリです。
- SciPyではNumpyで行える配列や行列の演算はもちろん、さらに信号処理や統計とい った計算ができるライブラリです。 
- NumPyよりも高度な数値計算処理を行う場合は、SciPyを利用するイメージです。 
- SciPyは統計、最適化、補完、積分、線形代数、フーリエ変換、信号処理、画像処理、 遺伝的アルゴリズム、ODEソルバ、特殊関数といった、高度な科学技術計算処理を Pythonを使って実行可能にします。 
- このライブラリもNumpyやPandasと同様に「Anaconda」に搭載されています。
- [公式サイト](https://www.scipy.org/)

## 可視化ライブラリ
### OpenCV 
- OpenCVとはインテルが開発・公開したオープンソースのコンピュータビジョン向けラ イブラリです。 
- [公式サイト](https://opencv.org/)

### Pillow(Python Imaging Library)
- Pythonに、各種形式の画像ファイルの読み込み・操作・保存を行う機能を提供するフリーのライブラリである。
- Windows、Mac OS X、Linuxで利用することができる。
- [公式サイト](https://pillow.readthedocs.io/en/stable/)

### Orange
- 「データ視覚化」「機械学習」「データマイニング」「データ分析」のためのコンポーネントベースのソフトウェアパッケージです。 
- 「探索的なデータ分析」と「対話的なデータ視覚化」のためのビジュアルプログラミングフロントエンドを特徴としています。
- プログラミングの知識がなくても、簡単に機械学習を使った予測の体験ができるアプリです。
- [公式サイト](https://orangedatamining.com/)

### Matplotlib(マットプロットリブ) 
- Matplotlibは、データをグラフや画像データとして表示することができるブラフ描画のためのライブラリです。 
- 機械学習では、統計量の可視化や学習経過のグラフ化、画像の出力等の機能が多く利用されています。 
- ヒストグラムや散布図を描いたり、JavaScriptを利用してインタラクティブなグラフを生成することも可能です。 
- Pandasでもデータの可視化は可能ですが、Matplotlibを利用する事で更に複雑な表示が可能です。 
- Matplotlibは、出版用にも使えるほど高品質なグラフを作成することができます。 
- そのため画像をPDFやJPEG、GIF等であらゆる形式でエクスポートできます。こちらも 「Anaconda」にも標準搭載されています。
- [公式サイト](https://matplotlib.org/)

### Elasticsearch 
- Elasticsearchは、分散型で無料かつオープンな検索/分析エンジンです。 
- テキスト、数値、地理空間情報を含むあらゆる種類のデータに、そして構造化データと 非構造化データの双方に対応しています。
- [公式サイト](https://www.elastic.co/jp/what-is/elasticsearch)

### Seaborn（シーボーン）
- Seaborn は、 matplotlibに基づく Python データ視覚化ライブラリです。魅力的で有益な統計グラフィックスを描画するための高レベルのインターフェイスを提供します。
- [公式サイト](https://seaborn.pydata.org/)

## 機械学習ライブラリ
### scikit-learn(サイキット・ラーン) 
- scikit-learnは、機械学習全般のアルゴリズムが実装された機械学習の基盤となってい る大人気のライブラリで「サイキット・ラーン」と読みます。
- 統計学、パターン認識、データ解析の技法が豊富に使うことができるので、特に研究者 の間で人気があります。
- 他のNumPyやSciPy、matplotlibと比較してもscikit-learnは、様々な機械学習の実装 を簡単に試すことができます。
- scikit-learnを使用することで、機械学習全般のアルゴリズムを簡単に実装できます。 
- データの状況に応じで細かく分岐されたチートシートを活用する事でアルゴリズム選択 が容易になります。 こちらのライブラリも「Anaconda」に標準搭載されています。 
- [公式サイト](https://scikit-learn.org/stable/)

### XGBoost
- XGBoost は、効率性、柔軟性、移植性に優れるように設計された、最適化された分散勾配ブースティング ライブラリです。
- Gradient Boostingフレームワークの下で機械学習アルゴリズムを実装します。
- XGBoost は、多くのデータ サイエンスの問題を高速かつ正確な方法で解決する並列ツリー ブースティング (GBDT、GBM とも呼ばれる) を提供します。
- 同じコードが主要な分散環境 (Hadoop、SGE、MPI) で実行され、数十億の例を超える問題を解決できます。
- [公式サイト](https://xgboost.readthedocs.io/en/latest/)

### LightGBM
- 機械学習における分析アルゴリズムで、与えられたデータから、目的となる変数を表現する「教師あり学習」と呼ばれる分野のデータ分析方法の1つ。 
- 目的変数に応じて、説明変数を「分類」するための手法で、高精度で信頼性が高く、また汎用性も高いことが特徴。 マイクロソフトによって2016年頃に開発された。
- [公式サイト](https://lightgbm.readthedocs.io/en/latest/)

### statsmodel
- statsmodelは、さまざまな統計モデルの推定、統計テストの実行、および統計データの探索のためのクラスと関数を提供する Python モジュールです。
- 結果統計の広範なリストが各推定量で利用可能です。結果は既存の統計パッケージに対してテストされ、正しいことが確認されます。
- [公式サイト](https://www.statsmodels.org/stable/index.html)

## 深層学習ライブラリ
### TensorFlow(テンソルフロー) 
- TensorFlowは、Googleが「Google Brain」というプロジェクトのもとで開発を行っ ているニューラルネットワークの最新ライブラリで、「テンソルフロー」または「テンサ ーフロー」と読みます。 
- ニューラルネットーワークとは、人間の脳を再現した仕組みで、現在もっとも注目され ている分野です。
- ライブラリの内部はおよそC++で作られていていますが、Pyhonも含まれており柔軟に 使用できる構造になっています。 
- ハイレベルな機能を実装可能で、計算をデータフローやグラフで表すことができまるた め、実践で、複雑な問題に対処できる非常に役立つライブラリです。
- TensorFlowはGoogleが開発したということもあり、Googleの音声検索や言語翻訳、 画像検索に使用しています。 
- また検索エンジンのアルゴリズムの一つである、RankBrain にも使用されています。 
- [公式サイト](https://www.tensorflow.org/?hl=ja)

### Keras(ケラス) 
- Kerasとは、Pythonで書かれたニューラルネットワークのライブラリです。 
- Kerasは、TensorFlowやTheanoといった他のディープラーニングのライブラリ上部で 動くような作りになっており、より簡単に深層学習のネットワークを作ることができるよ う設計されています。 
- 人間にとって分かりやすい設計のため、初心者でも簡単に迅速なプロトタイピングが可 能となっています。 
- Kerasを使えば、誰でもすぐにディープラーニングができるといえる ほど簡単なので初心者にやさしいライブラリといえます。
- Kerasを利用すると深層学習の背後にある数学的な部分を新規にゼロから開発し、実装 しなくても、各層で利用するアルゴリズムとパラメータを指定するという比較的短いコー ドで目的のネットワークを表現する事が可能になります。
- そのため、研究領域において非常に流れが早く、企業等でも素早く最新の実装が求めら れる深層学習の分野において、Kerasを使うことで最新手法を素早く試す事ができるとい う利点があります。 
- また、Kerasは、日本語化されたドキュメントがあるため、日本人にとってはありがた いポイントです。
- [公式サイト](https://keras.io/ja/)

### Pytorch (パイトーチ) 
- Pytorchは、自然言語処理で利用される機械学習ライブラリTorchを元に作られたディ ープラーニングフレームワークです。
- Facebookの人工知能研究グループが初期に開発を行いました。
- 計算速度も早く、ソース コードが見やすく扱いやすいと近年人気が急上昇しています。 
- PyTorchの特徴として、ニューラルネットワークを構築するために、計算に必要となる 計算グラフを動的に構築するという点が挙げられます。 
- 計算グラフとは、ニューラルネットワークを構築する計算の過程をグラフ化したもので す。
- PyTorchでは、ニューラルネットワークの計算に必要な計算グラフを実行するたびに 構築し、実行するため、動的といいます。
- 動的な計算グラフのメリットは、柔軟にモデル構築を行えるため、比較的容易に複雑な ネットワークを実装できることです。
- デメリットとしては、都度計算グラフを構築して実 行するため、学習速度がおちます。 
- [公式サイト](https://pytorch.org/)

### Chainer(チャイナー)
- ニューラルネットワークの計算および学習を行うためのオープンソースのソフトウェアライブラリである。
- バックプロパゲーションに必要なデータ構造をプログラムの実行時に動的に生成する特徴があり、複雑なニューラルネットワークの構築を必要とするディープラーニングで用いられる。
- Preferred Networks（PFN）は2019年12月5日、ディープラーニング（深層学習）のライブラリ「Chainer」（チェイナー）の開発をストップし、今後はライブラリ「PyTorch」（パイトーチ）の開発に参加すると発表した。
- Chainer開発の責任者であるPFNの秋葉拓哉執行役員は、「PyTorchという非常に優れたフレームワークを使うメリットと、Chainerを使い続けるメリットとを比較した結果、PyTorchに移行すべきだと決断した」と説明する。
- 「PyTorchは先進的なフレームワークで、機能や実行速度も優れている。PyTorchを利用することで、PFNの研究開発もより加速する。ChainerからPyTorchへの移行コストが低いことも決断を容易にした」（同氏）。
- [公式サイト](https://chainer.org/)

## 自然言語処理ライブラリ
- 自然言語とは人間が用いる言語のことで、コンピュータが処理する機械語に対応した表現です。
- 日本語も英語も自然言語の一つです。
- 自然言語処理とは、そんな自然言語を単語単位に分割して、数学的・統計的理論に基づいて解析する技術です。
- 自然言語処理は、Googleなどの検索エンジンやAppleのSiriやAmazonのAlexaといったスマートアシスタント、メールのスパムフィルター、テキストの予測変換、機械翻訳など、様々な分野に活用されています。

### Mecab
- オープンソースの形態素解析エンジン。複数のプログラミング言語に対応しており、辞書の追加も容易です。
- [公式サイト](https://taku910.github.io/mecab/)

### Janome
- Pythonで書かれた形態素解析器。辞書も内包されていて利用しやすいのが特徴。
- [公式サイト](https://mocobeta.github.io/janome/)

### Chasen
- 奈良先端科学技術大学院大学松本研究室で開発された形態素解析器。
- [公式サイト](https://chasen-legacy.osdn.jp/)

### JUMAN
- 京都大学大学院の黒橋・褚・村脇研究室で開発された日本語形態素解析システム。
- [公式サイト](https://nlp.ist.i.kyoto-u.ac.jp/index.php?JUMAN)

### GINZA
- オープンソース日本語自然言語処理ライブラリ。
- [公式サイト](https://megagonlabs.github.io/ginza/)

## 音声認識ライブラリ
- 音声認識とは、デジタル化した音声をコンピュータで学習することで、音声を判別したり、新たな音声を生成するための技術です。
- 活用例としては、SiriやGoogle Home、音声による検索機能、会議の議事録・コールセンターでの問い合わせの文字起こしなどが挙げられます。

### Speech recognition
- 様々な音声認識エンジン、音声認識APIをサポートする音声認識ライブラリ。
- [公式サイト](https://pypi.org/project/SpeechRecognition/)

### Pyaudio
- PortAudioをPythonで利用可能にするライブラリ。
- [公式サイト](https://people.csail.mit.edu/hubert/pyaudio/docs/)

### Julius
- 音声認識システムの開発・研究のための、オープンソース汎用大語彙連続音声認識エンジン
- [公式サイト](https://julius.osdn.jp/)
 
## 機械学習/データサイエンス用語について
### 人工知能(AI)
- 「計算」という概念と「コンピュータ」という道具を用いて「知能」を研究する計算機科学の一分野を指す語です。
- 「言語の理解や推論、問題解決などの知的行動を人間に代わってコンピューターに行わせる技術」、または、「計算機による知的な情報処理システムの設計や実現に関する研究分野」ともされます。

### シンギュラリティ（Singularity）
- 人工知能が人間の知性を大幅に凌駕する時点や、それにより起こる社会や生活の変化を示す概念です。
- シンギュラリティ（特異点）という用語は、もともと数学や物理などで用いられていました。
- シンギュラリティはテクノロジーが進歩し、人類の生活が一変する「技術的特異点」と呼ばれているものです。

### ベーシックインカム
- すべての国民に無条件で一定の所得の支給をする制度のことです。
- メリット
  - 貧困問題や格差の解決
  - 生活保護のような制度の管理コストの削減
  - 多様性の維持・発展への貢献

### 機械学習エンジニア
- AIを扱い、システムを構築する「エンジニア」
- Linux
- Python
- 機械学習ライブラリ
- 開発環境を構築するスキル
- データベース知識
- クラウド知識

### データサイエンティスト
- データ分析で企業などのビジネスをサポートする「コンサルタント」業
- 統計学や数学に関するスキル
- ビッグデータに関する知識
- プログラミングの知識（主にPython）
- データベースの知識
- セキュリティなどのIT全般の知識
- コミュニケーションスキル

### 機械学習とは
- 機械学習とは、経験からの学習により自動で改善するコンピューターアルゴリズムもしくはその研究領域で、人工知能の一種であるとみなされている。
- 「訓練データ」もしくは「学習データ」と呼ばれるデータを使って学習し、学習結果を使って何らかのタスクをこなす。 

### ライブラリとは
- ライブラリとは、「特定の処理を実行するためのプログラムをまとめたもの」です。
- 例えるならば、システム構築のための道具箱のようなものでしょうか。他人が作成したプログラムも利用することができるため、大幅な作業時間の短縮になります。また、目的に応じて適切なライブラリから適切なプログラムを呼び出して用いることで、実行できる処理の幅を飛躍的に広げることができます。
- なお、ライブラリと似た用語にフレームワークがありますが、厳密にはこれらは異なります。
- フレームワークは「全体が大まかに設計されたプログラムの集合体」のようなものです。ライブラリが道具箱ならば、フレームワークは雛形です。フレームワークを活用しつつ、細部を目的に合わせてカスタマイズすることで、独自の処理を実行することができます。

### 機械学習ライブラリとは
- 機械学習モデルを構築するためのプログラムをまとめたものです。

### データサイエンスとは
- データサイエンスまたはデータ科学とは、データを用いて新たな科学的および社会に有益な知見を引き出そうとするアプローチのことです。
- その中でデータを扱う手法である情報科学、統計学、アルゴリズムなどを横断的に扱います。
 
### 前処理
- 簡単にいうとAIにデータを学習させる前にデータを加工することです。
- AIがデータを学習しやすいよう、データをきれいに整える作業と考えるとわかりやすいかもしれません。
- AIを実装するまでには、大きく4つの工程があります。データ前処理は、この工程の1つです。

### 教師あり学習
- 確立されたデータのセットと、そのデータが分類される方法の確実な理解から始まります。
- 分析プロセスに適用できる、データのパターンを見つけることを目的とします。

### 教師なし学習
- 問題が大量のラベルなしデータを必要とする場合に使用されます。
- 例えば、Twitter、Instagram、Snapchatなどのソーシャル・メディア・アプリケーションには、すべて大量のラベルなしデータがあります。
- このデータの背後にある意味を理解するには、検出したパターンまたはクラスターに基づいてデータを分類するアルゴリズムが必要です。
- 教師なし学習は反復プロセスを行い、人間の介入なしにデータを分析します。

### 特徴量
- 人工知能に学習させようとするデータセットの特徴を定量的に表現したものを「特徴量」といいます。
- ディープラーニングでは、この特徴量は人間が与えずとも人工知能自身が自分で発見します。

### 決定境界
- データの分類予測を行う際に予測の基準となる境界線のことです。
- 学習済のモデルが値域内の各点においてどのような分類予測を行うのかを調べることで決定境界を求めることが出来ます。

### 単回帰分析
- 1つの目的変数を1つの説明変数で予測する方法です。

### 重回帰分析
- 1つの目的変数を複数の説明変数で予測する方法です。

### バッチ学習
- 全てのデータを一括投入してモデルを学習する手法です。 
- モデル学習に費やす計算時間は非常に長くなる傾向にあるため、モデルの学習と予測を分けて行うのが特徴的です。 
- このように、予測を分けて学習する方法をオフライン学習と言います。
- 一度に全てのデータを利用するため学習の進行が安定しやすいです。
- 学習データに少量の異常データが混じっていても、モデル性能に与える悪影響を小さく抑えることが出来ます。
- 全データを利用するため、使用するメモリ量が大きくなる。計算負荷が大きいです。
- 株価予測などリアルタイムで何度もモデルを更新するケースでは適用が難しいです。
- 学習手順
  - すべてのデータを投入する -> 損失関数で誤差を算出する -> 誤差を用いてパラメータを更新する

### オンライン学習
- オンライン学習とは、データをランダムに1件ずつ投入してモデルを更新していく手法です。
- 1件ずつデータを投入するためメモリ使用量も少なく、モデル学習にかかる計算負荷も小さいです。
- バッチ学習が不得意とするリアルタイムでモデル更新を頻繁に行うケースにも適用しやすいです。
- 1データごとにパラメータを更新するため学習が安定しにくく、1データ単位の計算速度はバッチ学習に劣リます。
- 異常なデータが入力されると、モデルの予測性能がそのデータにひっぱられる可能性があります。
- 異常検出アルゴリズムのような、異常データをモニタリングできる仕組みが別途必要となリます。
- 学習手順
  - すべてのデータを一定件数のグループごとに分割して投入する -> 一定件数のグループごとに損失関数で誤差を算出する -> 誤差を用いてパラメータを更新する -> 一定件数のグループの数だけ繰り返す

### ミニバッチ学習
- バッチ学習とオンライン学習の中間のような学習手法であり、データをミニバッチという小さなグループに分割してモデルを学習します。
- 学習の進行はオンライン学習より安定・バッチ学習より不安定です。
- 異常データから受けるモデル学習への影響度は、オンライン学習より小さくバッチ学習より大きいです。
- データあたりの計算速度はオンライン学習より速く、バッチ学習より遅いです。
- メモリ使用量はオンライン学習より大きく、バッチ学習より少ないです。
- 学習手順
  - ランダムにデータを1件投入する -> 損失関数で誤差を算出する -> 誤差を用いてパラメータを更新する -> 停止条件を満たす

### 勾配降下法
- 重みを少しずつ更新して勾配が最小になる点を探索するアルゴリズムです。 
- ディープニューラルネットワークにおける損失関数、コスト関数、誤差関数を最小化することに利用されます。

### バッチ勾配降下法
- バッチ勾配降下法とは、関数の傾きの1 次導関数に着目して最小値を求める方法です。 
- 例として、簡単な線形予測モデルを考えます。
- このモデルを、説明変数（特徴量） x にあるパラメーター w をかけることによって、目的変数 y を予測するモデルと仮定とします。

### 確率的勾配降下法
- 確率的勾配降下法とは、ランダムなデータ一つのみで勾配を求め、パラメータの更新をしていく作業をデータの数だけ行う方法です。
- バッチ勾配降下法をオンライン学習に改良したアルゴリズムです。

### ミニバッチ勾配降下法
- バッチ勾配降下法と確率的勾配降下法の中間を取った方法です。 
- 全データの誤差の和でもなく１つのデータの誤差でもなく、いくつかのデータの誤差の和を使う方法です。

### ロジスティック回帰
- ロジスティック回帰は、1958年にデイヴィッド・コックスが発表されました。
- ベルヌーイ分布に従う変数の統計的回帰モデルの一種である。
- 主に、「統計学」, 「医学」, 「社会科学」などの分野で使用されています。

### ソフトマックス回帰
- ソフトマックス関数は、主に分類問題の出力層で使われる活性化関数です。
- 分類問題を線形回帰モデルで学習し、ソフトマックス関数で締めくくります。

### リッジ回帰
- 独立変数が強く相関している場合に、重回帰モデルの係数を推定する回帰分析手法です。
- 主に、「計量経済学」, 「化学」, 「工学」などの分野で使用されています。

### ラッソ回帰
- 変数選択と正則化の両方を実行し、生成する統計モデルの予測精度と解釈可能性を向上させる回帰分析手法です。
- 1986年に地球物理学の文献で最初に導入され、1996年にロバート・ティブシラニ が独自に再発見して一般化されました。

### 回帰型ニューラルネットワーク
- ノード間の結合が配列に沿った有向グラフを形成する人工ニューラルネットワークのクラスです。
- これによって、時系列のための時間的な動的振る舞いを示すことが可能になります

### 多項式回帰
- 次多項式でモデル化する回帰分析の一手法です。 
- 従属変数と独立変数が非線形的な関係で表現されるような場合に適しています。
- 例えば神経組織の成長、湖底堆積物中の炭素同位体の分布、感染症の拡大の記述に用いられます。

### K-分割交差検証
- データをK個に分割してそのうち1つをテストデータに残りのK-1個を学習データとして正解率の評価を行います。 
- これをK個のデータすべてが1回ずつテストデータになるようにK回学習を行なって精度の平均をとる手法です。

### MNISTデータベース
- さまざまな画像処理システムの学習に広く使用される手書き数字画像の大規模なデータベースです。
- 米国商務省配下の研究所が構築したこのデータベースは、機械学習分野での学習や評価に広く用いられています。

### GAN
- GANとは、「Generative Adversarial Network」(敵対的生成ネットワーク)の略称です。
- 2014年にイアン・グッドフェローらによって発表されました。
- 用意されたデータから特徴を学習し、擬似的なデータを生成することができる生成モデルです。

### CNN
- CNNとは、「Convolutional Neural Network」(畳み込みニューラルネットワーク)の略称です。
- データから直接学習をすることが出来るディープラーニングモデルです。
- 物体や顔、シーンを認識するために画像の中からパターンを見つけるのに特に有効です。
- また、音声、時系列、信号データなど、画像以外のデータを分類する際にも非常に有効な手法です。

### SVM
- SVMとは、「Support Vector Machine」(サポートベクターマシン) の略称です。
- データ間の境界を決定する機械学習モデルです。
- 教師あり学習で、分類と回帰を扱うことができますが主に分類のタスクで使用されます。

### OpenAI
- 営利法人OpenAI LPとその親会社である非営利法人OpenAI Inc. からなる人工知能研究所です。
- 人類全体に利益をもたらす形で友好的なAIを普及・発展させることを目標に掲げ、AI分野の研究を行っています。