Amazon Machine Learning その① そもそも機械学習とは。Amazon Machine Learningとは

最近の流行りのビッグデータとか機械学習とかIoTとかAIとか勉強したいなーって前々から思ってたので、今回は表題の通り、Amazon Machine Learningについて学習します。

まずはAmazon Machine Learningがどういうサービスかの調査

参考にしたページ:
AWS再入門 Amazon Machine Learning編 | Developers.IO

そもそも機械学習とは、その名の通り機械(≠ロボット)に学習をさせて、その学習結果を活用すること。
もうちょっと具体的に言うと機械に大量のデータを読み込ませることによって、そのデータ内に潜むパターンを発見(これを学習という)させることにより、その学習した結果を新たなデータにあてはめることで、パターンにしたがって将来を予測すること。

更に分かりやすくするために具体例を挙げるとディズニーの日毎の入場者数,曜日,天気,気温あたりを100日分くらい読み込ませておきます。
すると、祝休日は入場者数が多いとか、気温が寒すぎたり暑すぎたりする日は入場者数が少ないとかのパターンを機械が発見してくれて、それによって3日後とかの天気予報と曜日とを入力しておけば入場者数を予測してくれる、みたいな感じです。

今のディズニーの例で挙げたような入力データから数値の予測を行う場合には"回帰"と呼ばれる学習手法を使うことになりますが、Amazon Machine Learningではそれ以外にも"二項分類"と"多項分類"という学習手法を使用できるようです。
それぞれ簡単に説明すると以下のようなものです。

  • 二項分類
    • 結果がYesかNoの2択(○と×でもいいです)のどちらかで表すことができるもの。 例えば、花子さんって名前を入力したときに、その名前が女性らしい名前か男性らしい名前かを判断するような機能です。
  • 多項分類
    • 結果が複数パターンの中から選択されるもの。ただし、有限な範囲で。 例えば、(ネットショッピングの)Amazonでいう『この商品はこんな商品も買っています。』みたいな感じで関連性をみつける機能って感じですかね。 ・・・ちゃんと理解してないので違ってたらすみません。m( )m
  • 回帰
    • 先ほどのディズニーのように入場者数を予測したりと、数値を予測するもの。

単純に考えると
簡単 二項分類 > 多項分類 > 回帰 複雑
であって、つまり精度も 二項分類 > 多項分類 > 回帰 になりそうな気がするんだけどどうなんだろうなー

次回あたりからMachine Learningを使っていきたいと思います。

CentOS7にnkfをインストールする

普通にyum install nkfじゃインストールできなかったので記事化。

普通にやるとこうなりました。

[takuya@localhost kabu]$ sudo yum install nkf
[sudo] password for takuya:
読み込んだプラグイン:fastestmirror
Repodata is over 2 weeks old. Install yum-cron? Or run: yum makecache fast
base                                                     | 3.6 kB     00:00
extras                                                   | 3.4 kB     00:00
updates                                                  | 3.4 kB     00:00
(1/2): extras/7/x86_64/primary_db                          | 166 kB   00:00
(2/2): updates/7/x86_64/primary_db                         | 9.1 MB   00:13
Determining fastest mirrors
 * base: ftp.iij.ad.jp
 * extras: ftp.iij.ad.jp
 * updates: ftp.iij.ad.jp
パッケージ nkf は利用できません。
エラー: 何もしません
[takuya@localhost kabu]$ cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)

『利用できません。』だけじゃなくてなんで利用できないのかも教えて欲しいですね。

まあ答えを言ってしまうとCentOS7のデフォルトbaseリポジトリにはnkfが入っていないんだそうで。

どっかからソースコードを拾ってきてコンパイルしてもいいんですが、CentOS6用のパッケージが利用できるようなので利用できるものは使っていく方針で。

yum localinstall -y http://mirror.centos.org/centos/6/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm でインストールできます。

[takuya@localhost kabu]$ sudo yum localinstall -y http://mirror.centos.org/centos/6
/os/x86_64/Packages/nkf-2.0.8b-6.2.el6.x86_64.rpm
[sudo] password for takuya:
読み込んだプラグイン:fastestmirror
nkf-2.0.8b-6.2.el6.x86_64.rpm                            | 110 kB     00:12
/var/tmp/yum-root-t93DBp/nkf-2.0.8b-6.2.el6.x86_64.rpm を調べています: 1:nkf-2.0.8b-6.2.el6.x86_64
/var/tmp/yum-root-t93DBp/nkf-2.0.8b-6.2.el6.x86_64.rpm をインストール済みとして 設定しています
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ nkf.x86_64 1:2.0.8b-6.2.el6 を インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 Package アーキテクチャー
                    バージョン             リポジトリー                    容量
================================================================================
インストール中:
 nkf     x86_64     1:2.0.8b-6.2.el6       /nkf-2.0.8b-6.2.el6.x86_64     241 k

トランザクションの要約
================================================================================
インストール  1 パッケージ

合計容量: 241 k
インストール容量: 241 k
Downloading packages:
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  インストール中          : 1:nkf-2.0.8b-6.2.el6.x86_64                     1/1
  検証中                  : 1:nkf-2.0.8b-6.2.el6.x86_64                     1/1

インストール:
  nkf.x86_64 1:2.0.8b-6.2.el6

完了しました!
[takuya@localhost kabu]$

で、無事インストールができたのでコマンドとして利用できます。

[takuya@localhost kabu]$ nkf --guess 1301-T
Shift_JIS (CR)

windows10にアップグレードしてからVirtual Boxが起動しなくなった

windows10へのアップグレード後、VirtualBoxが起動しなくなってました。
タスクマネージャで監視してると、VirtualBox.exeの実行後、プロセスが起動して1秒程度で死亡してる感じ。
ちなみにGUIは全く表示されません。

VirtualBox Host-Only Ethernet

原因を探しているとネットワーク接続にVirtualBox Host-Only Ethernetが無くなっていることを発見。

VirtualBoxインストーラ使ったrepairしても修復されなかったので、アンインストール→インストールを行ったら無事に上記のネットワークが作成されました。

f:id:hosibui:20161119172033j:plain

この状態でVirtualBox.exeを実行すると、VirtualBoxが起動され・・・あれ、起動されない。

うーん・・・

driverのインストール

次に、driverを改めてインストールしてみることに。
C:\Program Files\Oracle\VirtualBox\drivers のサブフォルダ配下にある拡張子がinfのファイルを片っ端から
右クリック→インストール

全部やってみたけど、やっぱりだめ・・・

VBoxHeadless.exeを実行

VBoxHeadless.exeを実行してみたところ、こんなメッセージが出力された。

f:id:hosibui:20161119174831j:plain

"RTLdrOpenWithReader failed: unknown status -626"で検索してみるが、あまり有益な情報はみつからない

最新版のVirtualBoxをダウンロード

使おうとしてたVirtualBoxインストーラは昔ダウンロードしたものだったので、念のために最新版をダウンロードして試してみる。
もちろん旧バージョンはアンインストールしてからね。

Downloads – Oracle VM VirtualBox

↑のURLからwindows用のインストーラをダウンロードしてポチポチボタン押してインストールを完了させると・・・

f:id:hosibui:20161119175943j:plain

え、で、できてしまった。。。

色々と調べておいてとても格好の悪いことに"最新バージョンをインストーラを実行する"というとても初歩的な方法で解決しました。
もしかしたら今まで持ってたインストーラはWindows10に対応してないインストーラだったのかもね。はははー

エンジニアとして情けない結末ですがこれで問題は解決です。

対技巧 角落ち 下手

下手(めりけん向かい飛車) vs 上手(居飛車

角落として貰ってこれだけ苦戦するって技巧つええよ

53手目は9四飛より7二飛でよかったのでは

開始日時:2016/11/13 16:27:10
手合割:角落ち
下手:あなた
上手:Gikou 20160606
△8四歩      ▲7六歩      △6二銀      ▲7八銀      △8五歩      ▲7七角
△4二玉      ▲6六歩      △3二玉      ▲6七銀      △2二玉      ▲7五歩
△1二香      ▲8八飛      △5一金右    ▲6五歩      △1一玉      ▲7六銀
△2二銀      ▲3八銀      △5四歩      ▲3六歩      △5三銀      ▲3七銀
△4二金右    ▲4六銀      △3一金      ▲5六歩      △3二金寄    ▲4八玉
△1四歩      ▲1六歩      △2四歩      ▲6六角      △2三銀      ▲3八玉
△2二金上    ▲7七桂      △4四銀      ▲8五銀      △3四銀      ▲3七桂
△2三銀      ▲2六歩      △3四歩      ▲7六銀      △7二飛      ▲8六歩
△7四歩      ▲同 歩      △同 飛      ▲7五歩      △9四飛      ▲2七玉
△3五歩      ▲同 歩      △6四歩      ▲8五歩      △6五歩      ▲同 銀
△7三桂      ▲7六銀      △3四歩      ▲同 歩      △同 銀      ▲3八金
△5五歩      ▲8四歩      △5六歩      ▲9六歩      △6五歩      ▲同 桂
△同 桂      ▲同 銀      △6四歩      ▲5四銀      △4二桂      ▲6三銀不成
△6五歩      ▲3九角      △2三銀      ▲3六歩      △3四桂      ▲3五銀
△7六歩      ▲9五歩      △7七歩成    ▲8五飛      △6七と      ▲9四歩
△5七歩成    ▲5二飛      △3五銀      ▲同 歩      △4九銀      ▲3四歩
△3八銀不成  ▲同 玉      △3六金      ▲5九桂      △3四銀      ▲8六飛
△6六歩      ▲2七銀      △同 金      ▲同 玉      △4八銀      ▲2八角
△5九銀成    ▲同 金      △3五桂      ▲3六玉      △4七と      ▲4八歩
△3八と      ▲1七角      △3七と      ▲同 玉      △4五銀      ▲3六歩
△1五歩      ▲2五歩      △8五歩      ▲同 飛      △3四歩      ▲3五歩
△1六歩      ▲3九角      △3五歩      ▲2四歩      △2五桂      ▲4七玉
△3六歩      ▲3八歩      △5六歩      ▲5八歩      △3七歩成    ▲同 歩
△5七歩成    ▲同 歩      △3七桂成    ▲同 玉      △3六歩      ▲4七玉
△5八歩      ▲4九金      △1七歩成    ▲3五金      △5九歩成    ▲同 金
△3七歩成    ▲同 玉      △9四歩      ▲4五金      △3三桂      ▲3四金
△2五桂      ▲4六玉      △4四歩      ▲5五玉      △2一金      ▲1三歩
△2二歩      ▲3三歩      △同 金      ▲同 金      △3二歩      ▲同 金
△同 金      ▲同飛成      △5六金      ▲同 歩      △1三香      ▲2一金
△1二玉      ▲1一金打
まで176手で下手の勝ち

AWSでファイルアップロードサーバを構築しよう。 index

AWSのサービスを使ってファイルアップロードサーバを構築しようという試みです。

AWSの色々なサービスを使って楽しく学ぶことが目的なので、ファイルアップロードサーバの機能的な完成度を高めることは目的ではありません。

また、ブログ記事を参考にシステムを構築して問題が発生しても責任は負いません。
セキュリティ面とか全然意識せずにやってるところ多いからね。

AWSでファイルアップロードサーバを構築しよう。① EC2基礎編
AWSでファイルアップロードサーバを構築しよう。② RDS基礎編
AWSでファイルアップロードサーバを構築しよう。③ S3基礎編
AWSでファイルアップロードサーバを構築しよう。④ IAMでS3利用可能なロールを作ろう
AWSでファイルアップロードサーバを構築しよう。⑤ EC2インスタンスでwebサーバ構築しよう。RDS,S3との連携もあるよ!
AWSでファイルアップロードサーバを構築しよう。⑥ lambdaを使ってサーバレスサービス化しよう

諸事情(私のモチベーション)により、④あたりまでは手抜き記事になると思われますがお許しください。

AWSでファイルアップロードサーバを構築しよう。③ S3基礎編

EC2基礎編でwebサーバとするEC2インスタンスの作成を行いました。
RDS基礎編でDBサーバをRDSで構築しました。
今回はS3でアップロードされたファイルの保存場所であるバケットを作成します。

S3でバケット作成

手順はかなり少なく簡単に作れます。

  • AWSのコンソールにログインし、サービス一覧からS3を選択
  • "バケットを作成"ボタンを押下
  • バケット名を入力
    • バケットをweb公開する際にバケット名がURLに使用される為、世界中で一意な名前である必要があります。
  • リージョンを選択
    • お好みで。私はTokyoを選択
  • "作成"ボタンを押下

以上。とても簡単ですね。

設定次第ではwebに公開してバケットに保存されているファイルを誰でも見ることができるようにすることができたり、見るだけではなくてファイルのアップロードも可能にできます。
他にもユーザ毎に権限を付与したりと色々設定を行うこともできますが、本記事では割愛。

実際に使ってみてバケットのプロパティ項目を眺めてればなんとなくわかるよ!
使ってみないと分かりにくいよ!!

次回以降で、
- EC2インスタンスでwebサーバ実装
- webサーバからRDSで作成したDBサーバを利用する設定
- webサーバからS3のバケットをマウント
あたりをやっていきます

AWSでファイルアップロードサーバを構築しよう。② RDS基礎編

EC2基礎編でwebサーバとするEC2インスタンスの作成を行いました。
今回はアップロードされたファイルの関連情報(日時,ファイル名,コメント)を保存するDBサーバをRDSで作成します。

あんまり難しいところないのでサクッと終わる予定。

RDSでDBサーバ構築

今回も重要なポイントだけ箇条書きでお送りします。

  • AWSのコンソールにログインし、サービス一覧からRDSを選択
  • "DBインスタンスの起動"ボタンを押下
  • DBインスタンスの各種設定を行う。私は以下のような設定で実施
    • DBエンジンはmysql
    • 本番稼働用ではなく、開発/テスト用を選択
    • DB詳細の設定いろいろ
      • DBエンジン:mysql
      • ライセンスモデル:GPL
      • エンジンバージョン:5.6.27
      • DBインスタンスクラス:db.t2.micro
      • ストレージタイプ:マグネティック
      • ストレージ割り当て:5GB
      • DBインスタンス識別子:awsdemo
      • マスターユーザ名前:お好みで
      • スターパスワード:秘密
    • 詳細設定
      • VPC:EC2インスタンスと同じVPC
      • サブネットグループ:webに繋がらないサブネット。EC2インスタンスには繋がるように。
      • パブリックアクセス可能:いいえ
      • アベイラビリティーゾーン(AZ): EC2インスタンスと同じAZ
      • VPCセキュリティグループ:mysql(ポート番号3306)の通信だけを許可
        • なお、セキュリティグループの設定に関わらずRDSのDBインスタンスssh接続はできません。
      • バックアップの保存期間:0日
      • マイナーバージョン自動アップグレード:いいえ
      • 他はだいたいデフォルト値でおっけー
    • "DBインスタンスの作成"ボタンを押下

ここまで実行すると、DBインスタンスの作成が開始され、サービス画面からインスタンスが確認できるようになります。 f:id:hosibui:20161025001215j:plain

すると上図吹き出しの位置にエンドポイントアドレスが表示されるので、そこに対してEC2インスタンスから以下のようにmysqlコマンドを叩いてやったりすると、mysqlサーバにアクセスすることができます。

$ mysql -u ユーザ名 -p demo -h awsdemo.xxxxxxxxxx.ap-northeast-1.rds.amazonaws.com

なお、webアクセス禁止の設定にしているので、ご自分のPCから直接mysqlコマンド叩いてもアクセスできませんよ。

GUIからいくつか設定をするだけですぐに使用できる状態のDBサーバが作成されるRDS便利ですね。

今回はお財布の事情により使用していませんが、冗長化やバックアップの取得なども簡単に設定することができ、自力でDBサーバの保守を行うよりもかなりお手軽に保守できます。