きな粉もち.net

.NET関連仕事に携わっています。OSSのソースを読んで気がついたことを中心に呟いたりブログに投稿したりしています。最近はUiPathを使ったRPAも研究中。気軽にフォローやツッコミよろしくおねがいします! Gitはここを使っています https://github.com/kinakomotitti

Docker × Ubuntu(on Azure) × Dockerの学習環境を構築してみた

この記事の目的

この記事では、
Dockerの学習環境を構築する準備作業の忘備録
を目的としています。

ゆくゆくは、kubernetesに入門したいと考えての記事になります!
参考)kubernetes実践入門
(Azure Antenna)AKSでコンテナアプリ DockerからKubernetesまで実践入門 - Speaker Deck


本題

Ubuntu端末の入手

Kubernetes、dockerともに初心者の自分が環境を構築するまでの道のりは長い。
まずは、Dockerを動かす環境となるUbuntu端末を設定していきます。
参考の実践入門に従い、AzureにUbuntuの仮想端末を用意します。
AzureでLinux仮想マシンを作成する手順は、公式のクイックスタートを参考にしました。

docs.microsoft.com


f:id:kinakomotitti:20180730235530p:plain
クイックスタートに従い、無事に構築完了。
あらかじめインストールしておいた「Bash on Ubuntu on Windows」を使い、ssh仮想マシンへ接続します。接続方法も、クイックスタートに書かれています。
Bash on Ubuntu on Windowssshコマンドを実行し、作成した仮想マシンにログインできるところまでできたら、マシンの準備は完了です。

★dockerの環境構築

いよいよDockerの準備です。
Dockerのインストール手順は、公式ドキュメントを参考に進めていきます。
docs.docker.com


apt-getをアップデートしたり、HTTPSを使ってリポジトリへの参照を許可する設定を入れたりといろいろしていきます。(Windowsインストーラーだと、ダブルクリック→次へ次へでいけるので、若干不便に感じます。。。)

メモ;わからなかったコマンド
curl -fsSL
・apt-key fingerprint

ドキュメントに書かれているリポジトリの設定が終わり、

	sudo apt-get install docker-ce

コマンドが正常に終了すると、dockerコマンドが使えるようになります。

	docker --version

で、インストールしたDockerのバージョンを確認することができるようになります。また、

	sudo docker run hello-world

とすることで、HelloWorldイメージを実行することができます。

runコマンドを実行することで、Dockerが以下の処理を行ってくれます。
1.Docker HubからイメージをPull(取得)
2.イメージをもとにコンテナを起動

賢いですね(´▽`)


せっかくなので、DockerコンテナでHelloWorld以外のことも試してみました。
参考にさせていただいたサイトです。
とても分かりやすいです!
weblabo.oscasierra.net

apachehttpdを実行し、ブラウザでアクセスできるところまでやってみようと思います。

	sudo docker pull httpd //httpdのイメージを取得
	sudo docker run -d -p 8080:80 httpd

二行目は、httpdのイメージを実行するときに、
(-d)バックグランドで実行する。
(-p)ホストマシンの8080ポートと、コンテナの80番ポートを紐づける。
というオプションを指定しています。

これで、AzureのUbuntu仮想マシンのdockerにhttpdが起動したコンテナが作成されました。
このhttpdにアクセスするためには、AzureのUbuntu仮想マシンの8080ポートにアクセスする必要があります。
デフォルトでは、AzureのUbuntu仮想マシンの8080ポートは閉じているので、Azureポータルの「ネットワーク」設定から、受信ポートの規則に、8080を許可する規則を追加します。

仮想マシンの8080ポートを許可して、http://仮想マシンのIP:8080/でアクセスすることで、「It Works!」がブラウザに表示されます!
わかりやすいドキュメントと、ツールのおかげでするすると進めることができます( *´艸`)

まとめ(というか感想?)

WindowsでDockerを始めようとしたこともありましたが、
Windows10Pro以上のエディションが必要なこと
SSDの容量が心配なこと
がネックとなりDockerを敬遠していました。
しかし、AzureにUbuntu仮想マシンを立てて実行することでそれらが解決できました。
もう少しDcockerでのやれることを知ったうえで、Kubernetesへ入門していこうと思います!

C# × DbProviderFactory × DBクライアントに依存しないDBアクセス処理についてまとめてみた

この記事の目的

この記事では、
DBクライアントに依存しないDBアクセス処理の実装をまとめること
を目的としています。
単純に実装方法がわからなかったので、まとめておきます。

本題

★DbProviderFactoryの取得

DbProviderFactoryを使ってDBクライアントに依存しないDBアクセス処理を実装する。
※以下のドキュメントを参考にする。
DbProviderFactory の取得 | Microsoft Docs

★接続文字列の取得

接続文字列も、設定ファイルに記述するようにしたい場合は、以下の処理を実装する。
※以下のドキュメントを参考にする。
接続文字列ビルダー | Microsoft Docs


★DbProviderFactoryの取得

接続するためには、必要に応じて以下のDLLを参照する。
○ System.Data.Odbc
○ System.Data.OleDb
○ System.Data.OracleClient
○ System.Data.SqlClient
  ※必要に応じて、Nugetから取得する。

まとめ

プロバイダに依存しない汎用的なDBアクセス処理を実装する場合は、
DbProviderFactoryを利用する。
接続文字列は、System.ConfigurationのConnectionStringsを利用することで、
設定ファイルに記述した接続文字列を利用することができる。
※設定ファイルに出すだけなら、AppSettingsでもいいかもと思いましたが、
おそらく邪道なのだろう・・・

Windows Workflow Foundation × UiPath カスタムアクティビティ × 自分的作成時の注意点


この記事の目的

この記事では、
Uipathのカスタムアクティビティを作るときの注意点をまとめる

を目的としています。
※自分なりの注意点なので、これがすべてではないです。
参考資料

  • UiPathのカスタムアクティビティを作成する公式ドキュメント

activities.uipath.com

  • Windows Workflow Foundationについてのドキュメント

https://docs.microsoft.com/ja-jp/dotnet/framework/windows-work

code.msdn.microsoft.com

  • とても参考にしたページ

 記事の中に、WCF、WFのサンプルコードのダウンロードリンクあり。
 このサンプルコードがとても分かりやすかったです。
カスタム アクティビティ デザイナーでの ExpressionTextBox の使用 | Microsoft Docs

本題

★そもそも、カスタムアクティビティを作るために必要なことは?

UiPathは「Windows Workflow Foundation(以下WF)」をベースに作られています。そのためカスタムアクティビティは、WFのアクティビティデザイナーを使って作成します。

ということで、用意するものは、
WFのコンポーネントをインストールしたVisual Studio Community
※その他のエディションも可
です。

なお、WFを利用するためには、Visual Studio をインストールする際、「個別コンポーネント」からWFをチェックし、明示的にインストールする必要があります。
※個別コンポーネントで指定しないとインストールされないので注意が必要です!
参考↓
f:id:kinakomotitti:20180719200653p:plain

★注意点その1:入出力パラメータ名を明確に!

基本的なお話になりますが、複数のパラメータを有するアクティビティを作成した場合、それぞれがアクティビティの入力値なのか、出力値なのかがわからなくなります。

以下のイメージのように、入力なら入力、出力なら出力と、わかりやすい命名規約を定義しておくのが良いと思います。
f:id:kinakomotitti:20180719200700p:plain
※これは極端ですね・・・

★注意点その2:プロパティには、変数を指定可能に!

カスタムアクティビティのコードを以下に示します。
※プロジェクト全体はGitHubに公開しています。


ここで、「Input」パラメータは、以下の図のように、ワークフローで利用している"変数"を指定することができます。以下の例では、”variable1”という名前の変数を指定しています。
f:id:kinakomotitti:20180719200712p:plain

一方、String型のプロパティとして定義した「Parameter」は、
以下のように、”定数”のみ受け付けるようになります。
f:id:kinakomotitti:20180719200717p:plain

このプロパティに、値をInputのようにvariable1を指定した場合・・・
f:id:kinakomotitti:20180719200724p:plain
本当は、”variable1”変数に格納された”Sample”という文字列が入ってくるのを期待するのですが、定数として扱われるため、"variable1"という文字列が渡されてきます。

[Category("Input")] とする場合は、どんな時もInArgumentを利用するのがよさそうです。WFでカスタムアクティビティを作るときには、常識なのかもしれませんが・・・

★注意点その3:仕様を明らかに!

一般的な「クラスライブラリ」の開発では、メソッドにXMLドキュメントとして仕様を記載します。それにより、インテリセンスなどでメソッドを参照したとき、
何の引数を渡したら、
どんな処理をして、
どんな結果が返ってくるか
という情報を得ることができます。

一方、UiPath(WF)では、作成したカスタムアクティビティについて、上記のような仕様を記載するものがないようです(=_=)

この問題を放置すると、
Step1)カスタムアクティビティの使い方がわからない
Step2)カスタムアクティビティの設計書を探す
Step3)設計書があれば読む
Step4)設計書がなければコードを読む 
Step5)コードから設計書を作成する ←だめだめですねw
といったようにどんどん作業が増えていきます。

そういったことにならないように。
また、設計書を探す手間を省くためにも、
アクティビティに仕様(XMLドキュメント相当のもの)
を書いてしまえばよいのではないかと考えた次第です。
イメージは以下の通りです。
f:id:kinakomotitti:20180719200734p:plain

設計書探さなくて済む。
仕様が変わったらコードの修正と一緒に説明書きを修正して配置までできる。
というメリットを受けることができると思います。

まとめ

初めてカスタムアクティビティを作った後に感じた反省点を目止めてみました。
作ってみてわかることもありますよね
今回の反省を次期開発に活かしたい・・・

C# × System.Convert.ToBase64String × 指定したファイルをBase64でエンコードしてクリップボードに格納する

この記事の目的

この記事では、
指定したファイルをBase64エンコードしてクリップボードに格納するコードのメモ
を目的としています。
以前投稿したクリップボードにコピーする記事の続きです。
kinakomotitti.hatenablog.com


本題

★背景

WEB APIの動作確認を行う時に、Base64に変換した文字列が必要になりました。
ちょいちょいとしか使わないため、C# Interactiveを使って実行しています。
今後も必要になりそうな雰囲気もあるため、とりあえずアウトプットしておきます。

★コード

指定したファイルをクリップボードにコピーするところまで実行するコードです。

#r "System.Windows.Presentation"
public class ToBase64String
{
    public static void Main(string args)
    {
        if (System.IO.File.Exists(args) != true) return;
        var base64String = System.Convert.ToBase64String(System.IO.File.ReadAllBytes(args));
        System.Windows.Clipboard.SetText(base64String);
    }
}

C# interactiveで実装したコードをそのまま載せています

仕様は、変換対象のファイルの絶対パスを引数で指定します。
指定したファイルが存在しない場合、何も起こりません。
ファイルが存在する場合、ファイルを読み込み、Base64に変換します。
Base64に変換された文字列はクリップボードにコピーされます。

これで、あとはCtrl +VするだけでBase64にした文字列を受け取ることができます!

★使い方

上記コードをC#Interactiveに貼り付け、実行した後、以下のようにMainメソッドを呼び出します。
f:id:kinakomotitti:20180717224750p:plain


まとめ

コンソールアプリにするまでもなくちょいちょいっと済ませたいとき、C# Interactiveはとても便利(/・ω・)/
今後使うことがあればよいな・・・

Bash × bats × VS Codeでbashの単体テスト環境を構築してみた

この記事の目的

この記事では、
Bashの自動テストツール(bats)環境の構築
を目的としています。

本題

★batsとは

Bash Automated Testing Systemです。
GitHubのURL↓
github.com


batsは、TAP(後述します)に準拠したbash用のテストフレームワークです。
batsによって、実装したbashが期待通りに動作することを簡単に検証することができます。
batsのテストケースは、bashスクリプトと、batsによって提供される構文で実装します。
こんな感じです(GitHubから拝借しています)。

	#!/usr/bin/env bats
	
	@test "addition using bc" {
	  result="$(echo 2+2 | bc)"
	  [ "$result" -eq 4 ]
	}
	
	@test "addition using dc" {
	  result="$(echo 2 2+p | dc)"
	  [ "$result" -eq 4 ]
	}


上記の例だと、2件のテストケースが定義されています。
resultに格納された値が4になることの検証を行っています。

★環境

以下の環境で作業を行いました。
Virtual Boxで用意したUbuntu(18.04)
Visual Studio Code(1.24.1)
bats(VS Code拡張機能 v.0.1.2)
bats(batsコマンドv.0.4.0)
GNU Bash(4.4.19)

★batsのVSCode拡張機能のインストール

Visual Studio Code拡張機能でbatsを検索し、インストールします。
f:id:kinakomotitti:20180704222150p:plain

★batsコマンドのインストール

batsを実行するためのコマンドをインストールします。
ubuntuのターミナルで以下のコマンドを実行します。
※管理者パスワードが要求されます。

	sudo apt install bats

★動作確認用のbatsファイルとプログラムの用意

batsのコードを実装する環境と、実行する環境が整いました。
引き続き、batsのテストコードと、テスト対象のコードを実装していきます。
テスト対象のコードは以下の通りです。
ファイル名は、Program001.shとします。

	#!/bin/bash
	echo "hello"
	exit 0


単純明快w

続いて、テストコードを実装します。
ファイル名は、Program001.batsとします。

	#!/usr/bin/enc bats
	@test "test  name"{
		Run ./Program001.sh       #<-テスト対象のスクリプトを実行します。 
		echo {$lines[0]}                #<- 失敗時の確認用に標準出力の1行目の文字を出力します。
		[ "${lines[0]}"="hello" ]    #<- 標準出力の1行目の文字の検証を行います。
		[ "$status" -eq 0 ]             #<- 終了コードが0であることの検証を行います。
	}


各ファイルは以下のように配置しました。
f:id:kinakomotitti:20180704222202p:plain

これで、準備が完了しました。

★テスト実行

早速テストを実行します。
VSCodeエクスプローラで、対象のファイルが格納されたパスでターミナルを開きます。
f:id:kinakomotitti:20180704222208p:plain

batsコマンドに、対象のテストファイルを渡して実行します。
f:id:kinakomotitti:20180704222215p:plain

実行結果↓
f:id:kinakomotitti:20180704222219p:plain

なお、$statsuの期待値を9にして、わざと失敗させた場合は以下の通りの出力となります。
f:id:kinakomotitti:20180704222224p:plain
わかりやすい!

★実行がうまくいかないとき

自分がbats環境を構築していてはまった点を忘備録として残しておきます。

上記の通りにスクリプトを準備しても、テストが成功しないことがありました。
f:id:kinakomotitti:20180704222252p:plain

何が悪いのかわからないので、テストコードを変更し、
検証に失敗しているlines変数に何が入っているか確認してみました。
f:id:kinakomotitti:20180704222256p:plain

実行してみます。
f:id:kinakomotitti:20180704222302p:plain
許可がない・・・だと・・・

いろいろ調べてみると、ファイルの実行権限が内容だということがわかりました。
参考)http://nasunu-i.b.la9.jp/LinuxBeginner/ExecPermission.htm
おもむろにllコマンドでファイルの権限を調べてみると
権限設定は以下のようになっていました。
f:id:kinakomotitti:20180704222340p:plain

rwだけ・・・
ファイルのプロパティで見ても、読み書きだけ権限になっています。
f:id:kinakomotitti:20180704222345p:plain

確かに権限がなかったです。

結局この問題は、上記画像の「プログラムとして実行可能」チェックをつけるか、
「chmod u+x Program001.shコマンドを実行することで解決します。
↓コマンドを実行し、実行可能権限を付与したところ。
f:id:kinakomotitti:20180704222355p:plain
無事権限が付与され、実行可能を意味する「x」が付きました。
ファイル名の色も変わっています(´▽`)

再度テストを実行すると・・・


無事成功させることができた!(∩´∀`)∩ワーイ
f:id:kinakomotitti:20180704222403p:plain

★TAPとは

TAP(Test Anything Protocol)。
シンプルなテスト出力についての仕様・・らしい。
もともとは、Perlのテストフレームワークとして作られたようですが、
今ではC,C++,Python,Java,JavaScriptなどに守備範囲が広がっています。
いずれ使うこともあるかも・・・

まとめ

batsを使えばbashで実装したスクリプトに対して自動テストを構築することができます。
デグレ防止、要件実装漏れを防ぐためにもとても役立ちます!
Windows開発者としては、同様のことをbatに対してもやれるようにしたい(´▽`)
batの手動テスト減らしたい!

Linux × パッケージ管理 × apt? yum? rpm?

この記事の目的

この記事では、
Linuxで使われるパッケージ管理コマンドの使い分けをまとめること
を目的としています。
日常的には、.NET 開発者としてWindowsOSを触っていますが、
.NET Coreをはじめとして、LinuxOSを触る機会も増えてきました。
いざLinuxでの開発業務が始まったときに戸惑わないようにするためにも
Linuxの使い方を少しずつまとめてみようと思います。

本題

★そもそもLinuxのOSって何があるの?

UbuntuRedHatCentOSでしょ。知ってる。

と思っていました。
Linux ディストリビューション
で検索したところ、そんなことはなかったです。

https://upload.wikimedia.org/wikipedia/commons/thumb/1/1b/Linux_Distribution_Timeline.svg/320px-Linux_Distribution_Timeline.svg.png

もはや見えませんが、大きく分けて、
Debian系」から派生したLinuxRedHat系」から派生したLinuxが存在します。
自分が知っていたUbuntuは、Debian系で、
RedHatCentOSRedHat系ということになります。
それぞれにたくさんの派生Linuxがいるようです。
把握しきれません。。。(/・ω・)/

よくよく見ると、Debian系には、Lindowsや、Raspbianがあることがわかります。
また、よく耳にするOSのAndroidChrome OS
  Debian系でもRedHat系でもないということもわかります。

Linux・・・・あなたは想像をはるかに超えた広い世界に存在しているのですね( ゚Д゚)

Debian

全体的な世界観を見たところで、Debian系とRedHat系に焦点を絞ってまとめていきます。
まずは、Debian系。
Ubuntuですね。

Debian系は、コミュニティベースで開発されているOSです。
そして、100%フリーソフトウェアです。
そのため、Debianから派生しているUbuntuも無料で利用することができます。
無料、ありがたい。

Debian系のOSでは、deb形式のパッケージ管理システムを利用します。

 (Ubuntuは、Windows 10のストアアプリとしても配布されています。
  Windowsubuntuを使うときは、このdeb形式のパッケージ管理システムを使うことになるようです。)


deb形式のパッケージをインストール・アンインストール・更新するためには、
dpkgコマンドを利用します。
このdpkgコマンドでは、パッケージのインストールなどの操作が可能ですが、
パッケージの依存関係の解決はできません。
つまり、依存関係の解決を手動で行う必要があります。

そんな操作を自動でやってくれるのが、dpkgの後に登場したaptコマンドです。
aptコマンドでは、依存関係の解決を行ってくれるため、
dpkgコマンドより簡単にパッケージの導入ができるようになります。

とりあえず、aptコマンドは、dpgkのすごい版として認識しておけばよいかと思っています。
もしくは、dpgkを良しなに使ってパッケージを管理してくれるaptコマンド。としてもあっているかもしれません。

このaptコマンドのオプションには、取得可能なパッケージを表示するlistオプションがあります。
これを使って、目的のパッケージを探すこともできるので、パッケージのURLを探す手間が省けて楽ができます。

参考Windows ストアでインストールしてきたUbuntuで[apt list]を実行したときのイメージは以下の通りです。
Ubuntuなので、特別な設定なしに利用することができます。
f:id:kinakomotitti:20180703212830p:plain

RedHat

続いて、RedHat系についてみていきます。
RedHat系のLinuxの仲間には、有償のものも含まれています。
CentOSのように完全無償化されているものもあります。
エンタープライズ向けに有償で提供されているディストリビューションもあるLinuxとして認識しておけば間違いがないのだと思います。

そんなRedHat系のLinuxでは、パッケージ管理システムにrpmを利用しています。
rpmは、Debian系でいうところのdpkgコマンドと同じ高さにあるコマンドです。
ということは、rpmを管理するすごい版のコマンドもあります。
それが、yumコマンドです。
yumコマンドも、aptコマンドのように、インストールしたいパッケージの依存関係を解決してくれます。

何の情報にもなりませんが、Ubuntu上でrpmyumを実行すると、コマンドがないと怒られます。
f:id:kinakomotitti:20180703212844p:plain

まとめ

Linux初心者の自分が躓いたことを調べてみました。
簡単にまとめておきます。
Debian系:Ubuntuなど
dpkg : パッケージの単体インストールをしてくれる人
apt : dpkgをまとめて管理して、依存関係を解決しながらパッケージをインストールしてくれる人
RedHat系:RedHatCentOSなど
rpm: パッケージの単体インストールをしてくれる人
yum : rpmをまとめて管理して、依存関係を解決しながらパッケージをインストールしてくれる人

参考文献

  ・果てしなくわかりやすくまとめられているサイトを参考にさせていただきました。
   eng-entrance.com
  ・Wikiから画像を拝借しました。   
   Linuxディストリビューション - Wikipedia

Windows ML × tudorial × タクシー料金の予測

この記事の目的

この記事では、
Windows MLのチュートリアルの実施メモを残すこと
を目的としています。
元ネタは、Microsoft Docsに投稿されている「New York taxi fares」です。
docs.microsoft.com

本題

★問題の概要

問題は、「ニューヨークで走っているタクシーの利用料金の予測」です。
ニューヨークでは、基本的に、走行距離に比例して値段が変動します。
しかし、タクシー会社によっては、乗客の数や、クレジットカード払いなど様々な要因によって、請求額が変更されるらしいです。


機械学習タスクの選択

タクシーの利用料金を予測するためにまずやらなければならないことは、適切なmachine learning task(機械学習タスク)を選択することです!
教師データに含まれる様々な要因に基づき、実際の根大を予想しようとしているため、今回は、Regression task(回帰タスク)を選択します。

----
Regression Taskとは・・・
関連する項目のセットから、特定の項目の値を予測するタスク。
例)株価予測
----
詳しくはここ
https://docs.microsoft.com/en-us/dotnet/machine-learning/resources/tasks#regression

★アプリケーションの作成

利用する機械学習タスクが決まったので、操作対象のアプリケーションを作成します。アプリケーションは、,NET Coreをターゲットとしたコンソールアプリを作成します。
f:id:kinakomotitti:20180701194904p:plain
こんな感じで作りました。
いきなり名前を無視してしまった…まぁいいか。

次に、Dataフォルダをプロジェクトに作成します。教師データを格納する場所ですね。
f:id:kinakomotitti:20180701194912p:plain

最後に、Microsoft.MLをNugetからインストールします。
f:id:kinakomotitti:20180701194917p:plain
これをインストールして、
f:id:kinakomotitti:20180701194923p:plain
こうなりました。確かに、依存関係にMicrosoft MLが追加されました。

★教師データの準備

githubリポジトリから、教師データをダウンロードします。
github.com
f:id:kinakomotitti:20180701194937p:plain
【Download】ボタンで右クリックしないと、対象ファイルを取得できない仕様に若干手こずりました(/・ω・)/

ダウンロードした2つのファイルを前のステップで作成したDataフォルダに格納します。
f:id:kinakomotitti:20180701195010p:plain
f:id:kinakomotitti:20180701195017p:plain

プロジェクトに追加されていることも確認できました!
f:id:kinakomotitti:20180701195028p:plain
出力ディレクトリーにコピーする設定も忘れずに行う!

今追加したデータの中で、今後のステップで利用する項目は以下の通りです。
+ vendor_id:タクシー会社のID
+ rate_code:乗車比率?←ちょっとよくわからない
+ passenger_count:乗客の数
+ trip_time_in_secs:乗車時間
+ trip_distance:移動距離
+ payment_type:支払い方法
+ fare_amount:料金

★dataクラスの作成

予測に使うデータ用のクラスを作成します。
チュートリアルに従い、「TaxiTrip」クラスを作成していきます。
f:id:kinakomotitti:20180701195037p:plain
コードは以下の通りです。(長いので一部だけ抜粋)
>|cs|
[Column("0")]
public string VendorId;

[Column("1")]
public string RateCode;

[Column("2")]
public float PassengerCount;
|


次に、予測結果を出力する先のクラスも作成します。
(TaxiTripクラスファイルの中に定義していますが、別のファイルに定義しても問題ないと思います。)
>|cs|
public class TaxiTripFarePrediction
{
[ColumnName("Score")]
public float FareAmount;
}
|

ColumnNameをScoreとしています。
Score列は特別な列名で、ML.NETでは、予測結果を格納するために利用されます。

★モデルの定義

いよいよ、先ほど作成したモデルクラスに、データを流し込む処理を実装します。
チュートリアルの手順に従い、Program.csに読み込み専用変数を定義します。
これらは、Dataフォルダに格納したCSVファイルのパスを格納するために利用します。

★学習処理の作成

いっぱいUSINGに追加します!
>|cs|
using Microsoft.ML;
using Microsoft.ML.Data;
using Microsoft.ML.Models;
using Microsoft.ML.Trainers;
using Microsoft.ML.Transforms;
|


そして、いよいよモデルの作成処理を実装していきます!
ここからは、あらかじめ用意しておいたコードベースにメモを残しておきます。
※なお、コンソールアプリのエントリポイント(Mainメソッド)を非同期にする都合で、言語バージョンをC#7.1以上に設定する必要があります。
f:id:kinakomotitti:20180701195050p:plain

コードも長くなるので、チュートリアルの以下の項目を実施した後のコードを下に示します

★データのロードと整形
★学習アルゴリズムの選択
★学習実行
★モデルの評価
★学習済みモデルを使った予測の実施


まとめ

機械学習フレームワークチュートリアルをやってみました!
実装自体はサクサクできましたが、RMSやR値など、統計的な知識がなく、正確な予測ができているかすら分かりませんでした( ゚Д゚)

いよいよ、統計学に手を出す時が来た気がしました。。。