統計検定準1級 25.因子分析・グラフィカルモデル
因子分析:複数変数の変動メカニズムを、少数の共通の要因によって集約する分析手法。例えば、複数問からなる数学の試験を、複数人の生徒が受験した場合を考える。各問の得点は独立に決定されるわけではなく数学が得意な人はどの問いも得点が高く、苦手な人は低い傾向にある。つまり、「数学の能力」のような直接は観測できない共通の要因が背後に存在し、その影響で各問の得点が決定されれていると考えられる。この共通の要因を共通因子と呼ぶ。
を生徒の問の得点とする。は問ごとに平均0、標準偏差に1に標準化されているとする。生徒の共通因子の値をと書き、生徒の因子スコアという。
のように定まることを想定したモデルを1因子モデルという。このとき、は因子負荷量、は独自性因子、は独自係数。
は道パラメータであり、最尤推定法を用いて推定する。
K因子分析:
と表される。
とするとき
ここで、をの対角成分がすべて1であるようなの正則行列とすると、
が成立し、因子スコアと因子負荷行列の取り方は無数に存在することが分かる。
この因子の解釈を容易にするような座標軸を探索する手続きを回転と言い、を直交行列に限る場合の開店を直交回転という。また、因子負荷行列の各要素を2乗してできた行列の各列の分散を最大にするような直交行列をバリマックス回転という。
統計検定準1級 22.主成分分析
統計検定準1級の学習10.検定の基礎と検定法の導出
統計的仮説検定の考え方
統計的仮説検定とは:データを用いて、数学的背理法と類似した方法により、仮説を検証する手法
例えば、ある母集団の平均(母平均)がある値とは異なることを示したい場合
①「母平均はある値とは異なる」という命題Aを証明したい→対立仮説
②まず命題Aを否定し、「母平均はある値と等しい」と仮定する→帰無仮説
③「母平均はある値と等しい」と仮定したもとで、データを取り、標本平均を求める。この標本平均が②の仮定の下では、極めて稀にしか得られない値であることを観察する
④命題Aの否定「母平均はある値と等しい」はおかしいと判断し、命題A「母平均はある値と等しい」は正しいと判断する
検定法の導出
確率変数、正規分布について、母分散が既知で、母平均がではないことを検証する統計的仮説検定を考える。
対立仮説:母平均はでない
帰無仮説:母平均はである
互いに独立な確率変数の標本平均は正規分布に従うことから、統計量は標準正規分布に従う。ここでが正しいと仮定すると、統計量は標準正規分布に従う。このは検定統計量と呼ばれる。
帰無仮説のもと稀だと判断する基準を有意水準という。有意水準5%の場合のとき帰無仮説を棄却する、あるいは有意水準5%で有意であるという。
両側検定:上例のようにの棄却域を分布の両側(\geq1.96])に設定している検定
片側検定:対立仮説をではなく、やの場合、やのように分布の片側だけの棄却域が適切な場合がある。
P値:帰無仮説の下で、観察されたデータがどれだけ稀かを示す確率である。P値はデータが観測されて計算される値であり、有意水準とは異なる概念である。
サンプルサイズ設計
第一種の過誤:帰無仮説が真であるのに、有意と判定してしまうこと。有意水準による制御される。
第二種の過誤:対立仮説が真であるので、有意と判定されないこと。その確率に対し、を検出力とよぶ。
帰無仮説の時と対立仮説の時の、検定統計量の分布を考える。帰無仮説の時はである(分布0)。一方、対立仮説の時は母平均をとすると、となる(分布1)。
これら2つの分布の一部は重なっており、棄却限界値を境として、棄却限界値より大きい分布0の面積を第一種の過誤確率と、棄却限界値より小さい分布1の面積を第二種の過誤確率として定義できる。つまり、棄却限界値の値によりとはトレードオフ関係にある。ただし、分布1の平均値よりが大きくなるか、が小さくなるつまりが大きくなる時に2つの分布が離れ、の面積がともに小さくなることが分かる。
抜取検査
抜取検査:検査ロットから、あらかじめ定められた抜き取り検査方式に従って、サンプルを抜き取って試験し、その結果をロットの判定基準と比較して、そのロットの合格・不合格を判定する検査
①検査ロットを定め、そのロットを構成する製品の数Nを特定する。
②検査ロットから抽出する標本の大きさnを定める。
③検査ロットの合格・不合格の判定基準を定める。
判定基準を、標本数n中の不良個数kがcより小さいとき合格、大きいとき不合格とする。ここでcは合格判定個数と呼ぶ。
合格ロットの不良率を、不合格ロットの不良率をとすると、本来は合格である検査ロットが不合格になる確率は
→生産者危険
となり、一方本来は不合格である検査ロットが合格になる確率は
消費者危険
参考:
GCE(google compute engine)インスタンスの自動停止・スケジュール
GCE(google compute engine)で、利用しない時間にインスタンスを停止したい。
そのために、GAE(google app engine)で、起動・停止用アプリケーションを設置し、それらのアプリケーションをGAEのcronで定期実行する。
目次
☆GAEとは
☆必要ファイル
-crom.yaml
-app.yaml
-実行スクリプト(instance.py)
-libs
☆アプリケーションのデプロイ
―――――――――
☆GAEとは
App Engineはインフラ部分を管理せずにWEBアプリを実装できる仕組み
過去記事を参照
http://tug-uca.hatenablog.com/entry/2018/06/12/182533
☆必要ファイル
cloud shell上で必要ファイルを以下のように配置する。
任意のフォルダ ├─ lib | └─ .... └─ cron.yaml └─ app.yaml └─ 実行スクリプト(instance.py)
本記事の大部分は以下の記事を参考にしている。
https://qiita.com/hatappi/items/a756ea8fd29d7d802e13
-crom.yaml
起動時間、停止時間を変えたいときは、このファイルを変更する。
フォーマット:https://cloud.google.com/appengine/docs/standard/python/config/cron#Python_app_yaml_The_schedule_format
cron: - description: "instance start" url: /instance/start schedule: every day 09:00 timezone: Asia/Tokyo - description: "instance stop" url: /instance/stop schedule: every day 22:00 timezone: Asia/Tokyo
-app.yaml
runtime: python27 api_version: 1 threadsafe: true handlers: - url: /instance/start script: instance.app login: admin - url: /instance/stop script: instance.app login: admin
-実行スクリプト(instance.py)
扱うインスタンスを追加・変更するときは[インスタンス名のリスト]を変更する。
#!/usr/bin/python # -*- coding: utf-8 - import sys sys.path.insert(0, 'libs') import webapp2 from oauth2client.client import GoogleCredentials from googleapiclient.discovery import build project = 'プロジェクトID' zone = 'インスタンスのあるゾーン' instance_names = [インスタンス名のリスト] credentials = GoogleCredentials.get_application_default() compute = build('compute', 'v1', credentials=credentials) # 開始用のHandler class class InstanceStartHandler(webapp2.RequestHandler): def get(self): print 'instance start process start' for instance_name in instance_names: # project, zone, instance名からインスタンスの情報を取得 instance = compute.instances().get(project=project, zone=zone, instance=instance_name).execute() print '%s is %s' %(instance['name'], instance['status']) # インスタンスが停止している場合は開始処理を行う if instance['status'] == 'TERMINATED': print 'instance %s start......' %(instance['name']) compute.instances().start(project=project, zone=zone, instance=instance['name']).execute() print 'instance start process end' # 停止用のHandler class class InstanceStopHandler(webapp2.RequestHandler): def get(self): print 'instance stop process start' for instance_name in instance_names: # project, zone, instance名からインスタンスの情報を取得 instance = compute.instances().get(project=project, zone=zone, instance=instance_name).execute() print '%s is %s' %(instance['name'], instance['status']) # インスタンスが動いている場合は止める処理を行う if instance['status'] == 'RUNNING': print 'instance %s stop......' %(instance['name']) compute.instances().stop(project=project, zone=zone, instance=instance['name']).execute() print 'instance stop process end' # app.yamlで設定したURLと実行するclassのセットを配列で定義する app = webapp2.WSGIApplication( [ ('/instance/start', InstanceStartHandler), ('/instance/stop', InstanceStopHandler) ], debug=True )
-libs
標準のライブラリ以外はディレクトリlibsに入れておく必要がある。
https://qiita.com/cocodrips/items/3bc82b1136a2bd7a7997
pip install -t libs google-api-python-client pip install -t libs oauth2client
☆アプリケーションのデプロイ
cloud shell上で以下のコマンドを実行する
アプリケーションのデプロイ
gcloud app deploy app.yaml
cronのデプロイ
gcloud app deploy cron.yaml
成功していれば、タスクキューのcronジョブが設定される。
Google App Engine事始め
基本的には、上記の公式チュートリアルをやってみると分かるが補足的な覚書を以下に記す。
将棋AI進化の変遷(盤面評価の方法について)
盤面評価とはある盤面が自分にとってどれだけ有利な状態であるかを判断することである。
AIが行うには、盤面が入力、評価値が出力となる、評価関数をAIが持つ必要がある。
将棋AIに盤面の評価関数の変遷について下図のようにまとめられる。
徐々に人の手を介さず、AI自身で評価関数を獲得していっていると言える。
今後、様々な対象に対してAIが実装されていくと予想されるが、初めから完全なものができるとは考えづらい。
AI進化の一例として参考になるかもしれない。
※似たような考え方で自動運転のレベル(http://standards.sae.org/j3016_201609/)があるがこちらはまだ最後まで到達していない。