百日学Swift(26日目) –プロジェクト4、パート1(プロジェクト4:パート1)
1. BetterRest:はじめに(BetterRestプロジェクトの紹介)
Core MLテクノロジーを使用して、機械学習の始まりである回帰分析の実装を試みます。Core MLは、すべてのiPhoneに組み込まれているテクノロジーです。
プロジェクトの要件:次の3つの質問をすることにより、コーヒーを飲む人が睡眠の質を改善できるように支援します。
(1)いつ起きたいですか?
(2)睡眠時間は何時間ですか?
(3)彼らは毎日何杯のコーヒーを飲みますか?
これら3つの値を使用して、Core MLに入力し、いつスリープするかを示す結果を取得します。考えてみれば、何十億もの答えが考えられます。さまざまな起床時間にすべての睡眠時間を掛け、次にコーヒーの量を掛けます。間違いなくこの数は膨大ですが、実際のアプリケーションでは、すべての人のデータを取得する必要はなく、不可能です。収集するサンプルが十分な大きさであることを確認するだけで十分です。サンプルデータはGitHubからダウンロードできます。
最初にプロジェクトを作成しましょう。
2.ステッパーで数字を入力する(ステッパーで数字を入力する)
ステッパー(ステッパー)は、数字を入力するために使用されるコンポーネントです。2つのボタン+
とがあり-
ます。IntやDoubleなどの複数のデータ型をバインドでき、値の範囲は型によって決まります。ステッパーの一般的な方法はonIncrement
、onDecrement
とonEditingChanged
です。具体的な使用方法は次のとおりです。
@State private var sleepAmount = 8.0
var body: some View {
Stepper(value: $sleepAmount, in: 4...12, step: 0.25){
Text("\(sleepAmount, specifier: "%.2f") hours")
}
}
パラメータ:
- 値:一般的にバインディングの状態
- in:番号範囲
- ステップ:ステップ長
3. DatePickerで日付と時刻を選択する(DatePickerを使用して日付と時刻を選択する)
DatePickerは日付を入力するための専用コンポーネントであり、Dateタイプのプロパティにバインドできます。
@State private var wakeUp = Date()
var body: some View {
VStack(spacing: 5) {
VStack{
Text("显示标签, 选择时分")
DatePicker("请选择时间:", selection: $wakeUp, displayedComponents: .hourAndMinute)
}.font(.headline)
Divider()
VStack{
Text("隐藏标签")
DatePicker("请选择日期:", selection: $wakeUp).labelsHidden()
}.font(.headline)
Divider()
VStack{
Text("放入表单 限制为始于现在")
Form {
DatePicker("请选择日期和时间:", selection: $wakeUp, in: Date()...)
}
}.font(.headline)
}
}
パラメータ:
- ラベル:null文字に設定されていても、labelHiddenがない場合はスペースを残します
- 選択:バインドされたプロパティ
- displayedComponents:
- デフォルト:1日、1時間、1分
- .date:日、月、年
- .hourAndMinute:時間、分
- in:range、これはループで使用される範囲に似ていますが、データ型はDateであり、IntやDoubleではありません。時間の表現はより複雑であるため、最初に開始点と終了点を変数として設定できます。これは制御が容易です。さらに、あなたは片側だけを書いて、Swiftに反対側を推測させることができます(ループは受け入れられません、ループは無限ではあり得ないが、時間は無限です、ハハ)
日付4.での作業(加工日付)
スウィフトは、提供Date
のような......秒、年、月、日、時、分をカプセル化した構造を。日付タイプの計算は常に秒の単位を扱いますが、これは特に日常の習慣と一致していません。
スウィフトも提供しDateComponents
、あなたがそのような毎月、ポイントとして、時間の特定の部分を保存して読むことができ、構造を。
使用スウィフトDAteFormatter
完了日Date
と文字列String
の間の変換。
詳細な紹介がないため、コンテンツのこの部分は少し戸惑っています。文書は注意深く検討されていません。
5. Create MLを使用したモデルのトレーニング(CreatMLを使用してモデルをトレーニング)
Core MLは、画像、音声、さらにはモーションの認識など、さまざまなトレーニングタスクを処理できます。このプロジェクトでは、機械学習で非常に一般的なテーブル回帰を調べます。つまり、スプレッドシートに似た大量のデータを通じて、Create MLのさまざまな値間の関係を見つけることができます。
機械学習は2つのステップで実行されます。
- モデルのトレーニング:コンピューターがすべてのデータを調べて、さまざまな値の関係を理解するプロセス。大きなデータの場合、トレーニング時間は数時間またはそれ以上になる場合があります。
- 予測:デバイス上で行われます。トレーニング済みモデルをアプリに提供すると、アプリは以前の結果を使用して、実行時に新しいデータを推定します。
(1)プロジェクトを作成する
まず、XcodeメニューからプロジェクトをOpen Developer Tool> Create ML
作成し、Create MLアプリケーションを開くことを選択します。多くのテンプレートから選択でき、一番下までスクロールして、を選択しTabular Regressor
、[次へ]をクリックします。プロジェクト名を入力し、BetterRest
[次へ]をクリックして、保存したフォルダーを選択し、[作成]をクリックします。
(2)MLを作成するためのトレーニングデータを提供します。
生の統計情報を表示するには、それには4つの値が含まれています。時間は、立ち上がって睡眠を楽しみにして、ドリンクコーヒー、毎日、どのように多くのために、実際にスリープ状態にする必要があります。プロジェクトデータはBetterRest.csv
ファイルに保存されます。これは、Create MLで使用できるカンマ区切りの値のデータセットです。最初のジョブは、このデータセットをインポートすることです。
したがって、[MLの作成]で、左側のナビゲーションバーでを選択Model Sources
しますBetterRest
。そして、右側のData Inputs
でTraning Date
、クリックSelect File
を選択し、ファイル選択ウィンドウを開き、ドロップダウンリストをBetterRest.csv
。
(3)目標Target
と特性を特定するFeatures
ターゲットは、コンピューターに予測を学習させる値であり、機能は、コンピューターがターゲットを予測するためにチェックする値です。たとえば、必要な睡眠量と実際に必要な睡眠量を選択した場合、コンピューターをトレーニングして、彼が飲んだコーヒーの量を予測できます。
ターゲットを選択してactualSleep
、必要な実際のスリープ時間を予測する方法をコンピューターに学習させることを示します。その後Select Features...
、すべての3つのオプションを選択しますwake
、estimatedSleep
そしてcoffee
すべての3つの要素を考慮した場合、コンピュータが予測を生成することを意味します。
(4)選択アルゴリズム
Select Features...
ボタンの下のドロップダウンリストを使用してアルゴリズムを選択します。「自動」Automatic
、「ランダムフォレスト」Random Forest
、「拡張ツリー」Boosted Tree
、「ディシジョンツリー」Decision Tree
、「線形回帰」の5つのオプションがありますLinear Regression
。誰もがさまざまな方法でデータを分析していますが、これは機械学習に関する本ではありませんが、それでも簡単に説明しておきたいと思います。
線形回帰はほとんど完全に私たちの脳の働き方であるため、理解するのが最も簡単です。線形回帰では、変数を線形関数の一部として扱うことにより、変数間の関係を推定しようとしますapplyAlgorithm(var1, var2, var3)
。線形回帰の目標は、すべてのデータポイント上に直線を描画できるようにすることです。この場合、直線と各データポイント間の平均距離はできるだけ短くする必要があります。
デシジョンツリー回帰によって形成されるツリー構造により、情報を一連の選択肢に整理できます。例:「あなたは人間ですか、動物ですか?あなたが人間である場合、あなたは生きていますか、それとも死んでいますか?それでも生きている場合、あなたは若いですか、古いですか?」などのように、毎回、ツリーは各質問の答えに従って分岐します明確な答えがあるまで。
拡張ツリー回帰は、一連の決定ツリーを使用して機能します。各ツリーは、前のツリーのエラーを修正するように設計されています。たとえば、最初の決定木は、良い予測を見つけるために最善を尽くしますが、20%低下します。次に、それを2番目の決定木に渡してさらに絞り込み、プロセスを繰り返しますが、今回はエラーが10%に下がります。それは3番目のツリーに入り、エラーは8%に減少し、4番目のツリーはエラーが7%に減少しました。
ランダムフォレストは拡張ツリーに似ていますが、少し異なります。拡張ツリーの場合、ツリー内のすべての決定は利用可能なすべてのデータにアクセスできますが、ランダムツリーの場合、各ツリーはデータのサブセットにしかアクセスできません。
あなたがコーディングの問題に直面していて、解決策を考え出そうとしていると想像してください。同僚にアドバイスを求めると、彼は彼が知っていることに基づいていくつかのアイデアを提供します。他の同僚に助言を求めると、彼らは彼らが知っていることに基づいて異なるアイデアをあなたに与えます。100人の同僚にアドバイスを求めると、一連の解決策が得られます。
各同僚の背景、教育、および職歴は他の同僚とは異なるため、一連の提案が表示されます。ただし、(ほとんどの人の発言や意思決定方法に関係なく)すべての人の提案を平均化すると、適切な解決策が得られる可能性が最も高くなります。
これがランダムフォレストリグレッサーのしくみです。各決定木には、他のツリーとは異なる独自のデータビューがあり、すべての予測を組み合わせて平均を形成することにより、良い結果が得られる可能性があります。
Automatic
オプションは、最適なアルゴリズムを自動的に選択しようとすることができます。常に正しいとは限りませんが、オプションのもつれを減らすのに役立ちます。ここではこれを選びます。
(5)トレーニング
すべての準備が整ったら、ウィンドウのタイトルバーにある[トレーニング]ボタンをクリックします。数秒後(データ量がまだ少ないため)、いくつかの結果インジケーターが表示されます。気になる値は「二乗平均平方根誤差」と呼ばれ、約180の値が得られるはずです。つまり、モデルは平均180秒または3分の誤差で、推奨される正確なスリープ時間を予測できます。
(6)出力
右上隅にOutput
MLModelアイコンが表示されます。ファイルサイズは約438バイトです。鉱山は555バイトです。マシンとマシンの間にはわずかな違いがあります。モデルのトレーニングが完了したので、アイコンを[Create ML]からデスクトップにドラッグし、次にコードで使用されるのを待ちます。
**ヒント:**トレーニングに他のアルゴリズムを試す場合は、[MLの作成]ウィンドウの右下隅にある[コピーを作成]をクリックします。