【AI】確率的勾配降下法 sgd(Stochastic gradient descent)
kerasでcompileする際にoptimizer(最適化)に設定できる。
正解からの誤差が大きい程逆方向により大きく調整する。
model.compile(optimizer="sgd")
stochastic:確率論的。トレーニング用データをランダムで与えて学習させる。
【AI】平均二乗誤差 mean_squared_error
kerasでcompileする際に引数として指定できる。
損失関数lossに指定する。
正解からのズレを2乗することで、符号が消え差を大きく表現できる。
正解10に対して
15を当てはめる:(15-10)^2 = 25
2を当てはめる:(2-10)^2 = 64
よって15のほうが正解に近いと学習される。
matplotlib.pyplotを知る
matplotlib.pyplot:
python機械学習等の図形描写用ライブラリ
matplotlib.pyplot.scatter()
scatterは「散乱」。散布図の描画。
import numpy as np import matplotlib.pyplot as plt # 50個の0~1のランダムな数値を取得 x = np.random.rand(50) y = np.random.rand(50) # 散布図を描画 plt.scatter(x, y)
k-最近傍法(KNeighborClassifier)
classifier(クラシファイア 分類器):様々なデータを分類していくシステム。
データセット:機械学習においてこの様々なデータの塊のこと。
データポイント:複数の特徴量をまとめたデータ。(行)
特徴量:データポイントを構成する特徴(列)
k-最近傍法。k nearest neighbor。k-NN。
k-最近傍法は「教師あり学習」であり、比較的シンプルな分類器である。
①既存のデータセットをベクトル空間(座標)上に描画する。
ベクトル空間(vector space線形空間):n次元の場合n個のベクトルで表されるもの。
→2次元の場合2個のベクトルで表されるもの。2次元の座標軸。
ベクトル:向きと大きさをもつ量のこと。数字が縦or横に一直線に並んだもの。平面や空間を走るやじるし。
大きさをスカラーという。スカラーに向きが加わるとベクトル(vector)と呼ぶ。
スカラーは「|a|」などの表記。ベクトルABの大きさ=線分ABの長さ。つまり「大きさ」と「長さ」は同じ意味を表す。
スカラー倍:長さ4のベクトルに10を掛ける。(10a) この10aの大きさは10*4=40である。このようにベクトルにスカラー(長さ・大きさ)を掛けることをスカラー倍と言う。
②kの数を予め決めておく。(k=1, k=3など)
②未知のデータポイントをベクトル空間上に置く。
③未知のデータポイントから距離が最も近い既存データポイントを取得しクラスを記録する。
距離の算出には一般的にユークリッド距離が用いられる。(難しいから後回し。)
④③をk回繰り返し、記録したクラスから多数決を行い、未知のデータポイントのクラスを決定する。
k-最近傍法を実際にやってみる。
前提:
sk-learnはfit()で訓練データを学習しpredict()で未知のデータを予測する。
kの指定はKNeighborsClassifierの引数n_neighborsで指定する。
#参考:https://qiita.com/fujin/items/128ed7188f7e7df74f2c import numpy as np import pandas as pd import matplotlib.pyplot as plt #描画ライブラリ from sklearn.datasets import load_iris # アヤメ(花)のデータセット iris = load_iris() X = iris.data y = iris.target pd.DataFrame(X, columns=iris.feature_names).head()
#学習データ/テストデータ分け from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(X, y, random_state=0) # k-NN list_k = [] list_score = [] for k in range(1, 31): knc = KNeighborsClassifier(n_neighbors=k) knc.fit(X_train, y_train) #ここで最も近い既存データをk個取得し学習している。 score = knc.score(X_test, y_test) list_k.append(k) list_score.append(score) # 描画 plt.ylim(0.9, 1.0) plt.xlabel("k") plt.ylabel("score") plt.plot(list_k, list_score)
アヤメの分類の場合、k値を増やす程精度は落ちていく。
重みつけの種類
uniformとdistanceの2つある。
【GCP】GCPコマンド一覧
コンソールにてgoogle-cloud-sdkのインストール
curl https://sdk.cloud.google.com | bash
gcloud info
アカウントやプロジェクトなど、gcloudの情報が分かる
gcloud config set project プロジェクト名
GCPプロジェクトの切り替え
gcloud auth login
gcloudコマンドをGCPアカウントと紐づける。
ローカルのコンソールで入力したことを、googleアカウント
gcloud auth listで表示されるようになる
gcloud auth list
登録されたアカウントとACTIVEなアカウントの一覧
gcloud compute --project aaaaaproject-171606 ssh --zone asia-northeast1-a instance-1
ログインできた
gcloud config set compute/zone asia-northeast1-a
ゾーンをconfigurationに設定する
gcloud config set account アカウント名(gmail)
アカウントを設定する
MySQL キーの種類
PRIMARY
プライマリーキー制約(主キー制約)
重複する値は設定できない。
NOT NULL必須
各テーブル1つまで
PRIMARYという名前のユニークインデックスが作成されると考えて良い。
ユーザーIDなど。
AUTO_INCREMENTで自動的に数値が加算される。
UNIQUE
ユニークキー制約(一意キー制約)
重複する値は保存できない。
nullでもOK。(nullの重複もOK。)
ユニークインデックスが作成される。
MULTIPLE
プライマリーキーでもユニークキーでもないインデックス。
外部キー制約。FOREIGN KEY。
外部キーを設定すると、キー欄が「MUL」となる。
同じ名前の複数重複が許されている。
参照整合性を保つための仕組み。
(MULTIPLE = 複数)
REFERENCES table名(column名)
で、参照先を設定する。
LaravelでMySQL8を使う場合、認証方式をcaching_sha2_passwordからmysql_native_passwordに変更する必要がある。
SELECT user, host, plugin FROM mysql.user;
を実行した時、pluginが
caching_sha2_password
となっている。
Laravelで使うには、認証方式を
mysql_native_password
に変更する必要がある。
Laravel リソースコントローラー
CRUD(create, read, update, deleteの各アクション完備)
php artisan make:controller HiyokoController - -resource
Controller内に作成されるメソッド
index, create, store($request), show($id), edit($id), update($request, $id), destroy($id)
PUT, PATCH, DELETEを使う際は、フォームに__methodパラメータを設定する必要がある?
作成後にルートを登録する
Route::resource(‘URL’, ‘Controller名’);
これでindex, create, store, show, edit, update, destroy全てのメソッドのルート設定が完了
リソースモデルの指定
php artisan make:controller HiyokoController - -resource - -model=Hiyoko
もともとモデルが作成されている必要がある?
index, create, store, show, edit, update, destroy、指定して使わせないこともできる。
Route::resource(‘hiyokos’, ‘HiyokoController’)->only ([
‘index’,’show’,
]);
Route::resource(‘hiyokos’, ‘HiyokoController’)->except([
‘create’, ‘store’, ‘update’, ‘destroy’
]);
onlyからexceptどちらかで大丈夫だよね。
APIリソースルート
ゲーム制作で使うのは、基本的にAPIでしょう。
どうやってweb.phpではなくapi.phpを使う?ディレクトリ「/API」を作ってその下にAPI用のControllerを置いて、使いたい。
php artisan make:controller API/HiyokoController - - api
GETで表示して入力待ちのようなメソッドは必要ない。(createやeditなど。storeやupdateは必要。)
Route::apiResource(‘hiyokos’, ‘HiyokoController’);
リソースコントローラーのデフォルトルート(index, create, store, show, edit, update, destroy)以外にルートを登録したい時は、
Route::resourceよりも前にRoute::getやRoute::postで設定する。
ルートキャッシュを登録しておくと、ルート登録が100倍早くなる。
ルートキャッシュを行うためには、ルートファイルにクロージャを書かないことが条件。
php artisan route:cache
PHP タイプヒンティング
引数や戻り値の型を明示的に書くこと
Laravelでいうと(Request $request)など
Laravel MiddleWare
HTTPミドルウェアは、HTTPカーネルのリストで最初に定義されている。
HTTPセッションの読み書き、CSRFトークンの確認など、通信の都度必要な処理が設定される。
ミドルウェア指定方法
1.ルートファイルで指定
web.phpやapi.php
Route::get(‘URL’, ‘HiyokoController@メソッド名’)->middleware(‘ミドルウェア名’);
2.ControllerのConstructerで指定
class HiyokoController extends Controller { public function __construct() { $this->middleware(‘ミドルウェア名’); } }
HiyokoController.php
Controllerにて、クロージャを使ったミドルウェアの登録
ミドルウェアをミドルウェアディレクトリに作成するまでもない時に便利。
$this->middleware(function ($request, $next) {
//処理
return $next($request);
});
ミドルウェアの引数$nextと$request
Modelデータの保存方法 createとfill
モデル::create
インスタンス化、fill、save全てやってくれる。
$flight = Flight::create([‘name’ => ‘飛行’]);
モデル:fill
インスタンスをnewする必要がある。
saveも自分で実行する必要がある。
$flight = new Flight();
$flight->fill([‘name’ => ‘飛行’]);
$user->save();
saveをあとで実行したい場合はfill
それ以外はcreate
Laravelのchunkとcursor DBデータを小分けにして取得
chunk/cursor
大量のデータをgetなど処理する場合に使う。
メモリの使用量を少なくする。
chunk(塊)
一定量ずつ処理
chunk(10, function ($people){ foreach($people as $person) { //処理の実行 } }
10件ずつ取得して処理を実行。
10件終わったら次の10件を取得して処理の実行。
Laravel Eloquentで大量のデータを取得する場合 - Qiita
cursor(カーソル)
1クエリずつ処理。
Laravel(Eloquent): chunk() vs cursor() - Qiita
大量のデータを扱う場合、allよりはマシだがメモリの使用量は大きい。
ActiveRecord
データベースからデータを読み出すアプローチをするデザインパターン。
RailsやLaravelなどのFrameworkで使われている。
MVCのModelで使われる。
データベースのテーブル1行が1つのモデルクラスにラップされる。
シンプルだが複雑な設計に弱い。
Laravel Eloquent
EloquentはLaravelのORM(Object-Relational Mapping)
モデルに設定されるuse
use Illuminate\Database\Eloquent\Model;
このEloquent
Laravel Modelクラスでよく設定されるフィールド変数 $tableオーバーライドはよく使う
$table:DBのテーブル名。
通常デフォルトではテーブル名はモデル名の複数形だが、
$tableをオーバーライドすることで別名を付けることができる。
$connection:外部DBへの接続。データベース名を指定。
[Laravel]Laravelで別々のDB(MySQL)に接続させる方法 - Qiita
$fillable:必ず埋める必要のある項目。埋めることのできる項目。
$guarded:更新してはいけない項目