You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

670 lines
24 KiB

WEBVTT
00:00.860 --> 00:03.890
JupyterLabへようこそ。
00:03.890 --> 00:06.920
そして3日目。
00:06.920 --> 00:08.900
第6週だ。
00:09.200 --> 00:13.580
またこのノートを楽しみにしています。
00:13.580 --> 00:16.130
いいものを用意したよ。
00:16.310 --> 00:21.650
だから、 今日もベースラインモデルを見るつもりだ。
00:21.650 --> 00:28.190
だから、 まずは見たことのあるインポートの数々から始めよう。
00:28.190 --> 00:30.080
特に目新しいことはない。
00:30.080 --> 00:33.890
しかし、 この2番目のセルに新しいインポートがいくつか入っている。
00:33.890 --> 00:41.150
従来の機械学習用パンダのインポートをいくつか紹介しよう。 このパンダは、
00:41.150 --> 00:48.260
おそらく旅の中で何度も出会ったことがあるだろう。
00:48.380 --> 00:51.320
ええと、 もちろん、 numpyはあなたにとって古馴染みだと確信している。
00:51.320 --> 00:52.760
そしてsklearn。
00:52.790 --> 01:00.620
Scikit learnは信じられないほど人気のある機械学習ライブラリで、 今日私たちがたくさん使うことになる一般的なアルゴリズムが何トンも何トンもありますが、
01:00.620 --> 01:14.120
最も重要なのは線形回帰で、 線形回帰モデルを実行するためのデータサイエンティストのツールキットの標準的な部分です。
01:14.690 --> 01:20.630
Gensimは、 少し前に紹介したword
01:20.660 --> 01:32.780
two vecのようなNLP関連でとても便利なライブラリだ。
01:32.810 --> 01:40.010
先ほど述べたように、 言葉をベクトルに変えるための強力なモデルである。
01:40.010 --> 01:44.450
だから、 そのセルも必ず走らせる。
01:44.780 --> 01:47.720
それからもうひとつ、 輸入品がある。
01:47.810 --> 01:50.630
ええと、 またscikit learnから。
01:50.630 --> 01:57.590
ただ、 より高度な機械学習のためにやっている2つの異なるインポートなので、 これらは別々にしておいた。
01:57.590 --> 02:03.600
1つはサポート・ベクトル回帰で、 サポート・ベクトル・マシンとパッケージの一部である。
02:03.600 --> 02:06.870
そしてもう1つは、 ランダムフォレスト・リグレッサーだ。
02:06.930 --> 02:12.390
ええと、 先ほどランダムフォレストについて触れましたが、 それも取り入れましょう。
02:12.840 --> 02:13.800
オーケー。
02:13.830 --> 02:17.700
さて、 この定数セットだが、 あなたを驚かせるかもしれない。
02:17.730 --> 02:19.860
ちょっと変わった形をしている。
02:20.070 --> 02:22.500
ええと、 その考えは止めておくように言っておくよ。
02:22.500 --> 02:23.670
後から入ってくる。
02:23.670 --> 02:26.040
このようなことをしたことがある人なら、 見覚えがあるかもしれない。
02:26.040 --> 02:32.910
それは、 うーん、 少し奇妙なことに、 非常に歴史的な様々な理由がある。
02:33.090 --> 02:42.960
ええと、 その特定の記号を標準出力にプリントすると、 色が緑色に変わるんだ。
02:43.200 --> 02:47.370
まあ、 いろいろな理由があるんだけど、 それはここでは書かないよ。
02:47.490 --> 02:53.820
そして、 リセットは色を黒か白に戻す。
02:53.850 --> 03:00.600
この定数を知っていれば、 カラー印刷も簡単にできる。
03:00.840 --> 03:01.410
オーケー。
03:01.410 --> 03:07.950
そこで、 定数を実行し、 いつもの環境設定を実行し、 ハギング・フェイスにログインする。
03:08.280 --> 03:09.510
うーん、 よくわからない。
03:09.510 --> 03:14.910
今日はハギング・フェイスを実際に使うことはないと思うので、 ハギング・フェイスにログインする必要はなかったと思う。
03:15.180 --> 03:18.900
それから、 Jupyterノートブックにmatplotlibが入っていることを確認してください。
03:18.990 --> 03:26.160
ええと、 データを再作成するのではなく、 ピックルファイルからデータを読み込みます。
03:26.160 --> 03:33.180
そこで、 トレーニングデータをもう一度見てみよう。
03:33.180 --> 03:35.970
では、 最初のトレーニング・データを取ってみよう。
03:35.970 --> 03:39.870
そして、 これが何であったかをもう一度思い出してもらうために、 その促しを求めるだけだ。
03:39.870 --> 03:48.150
というわけで、 このアイテム・オブジェクトのプロンプト属性を探しています。
03:48.150 --> 03:52.050
ええと、 過去に、 ええと、 2日前に。
03:52.140 --> 03:55.350
でも、 これで皆さんがこのことをより身近に感じてくれることを願っています。
03:55.380 --> 03:58.110
きれいに印刷できるように印刷させてください。
03:58.560 --> 04:01.740
うーん、 そうだな。
04:02.010 --> 04:02.880
ええと、 これです。
04:02.880 --> 04:04.620
1ドル単位でいくらですか?
04:04.620 --> 04:08.350
そしてタイトルがあり、 ディテールがあり、 価格がある。
04:08.380 --> 04:15.580
さて、 なぜ私がこの問題のために特別にこのアイテムクラスのようなものに多くの時間を費やしているのか不思議に思うかもしれない。
04:15.580 --> 04:20.710
このようなことは、 あなた自身が商業的な問題に直面したときに、 その問題を解決し、
04:20.740 --> 04:25.450
データを加工する方法を探すために行うことなのです。
04:25.450 --> 04:28.420
だから、 これは役に立つ実戦経験なんだ。
04:28.450 --> 04:34.000
このコード、 つまりアイテム・クラスを正確に使うことはないだろうし、 おそらくこのようなプロンプトはないだろう。
04:34.000 --> 04:39.190
しかし、 このようなテクニックは皆さんにも再現できるものなので、 それを理解し、 私がどのような決断を下しているのかを理解することが重要で、
04:39.190 --> 04:46.720
そうすれば皆さんは自分のプロジェクトで自信を持って同じことができるようになる。
04:46.780 --> 04:51.160
つまり、 これがトレーニングのプロンプトだ。
04:51.190 --> 04:53.500
では、 テストプロンプトを見てみよう。
04:53.500 --> 04:57.700
では、 テスト項目の1つ目を紹介しよう。
04:57.700 --> 05:00.790
そして、 このメソッドをテスト・プロンプトと呼ぶことにする。
05:00.790 --> 05:11.980
そして、 基本的にトレーニングのプロンプトを取るが、 モデルをテストするときに答えが明らかにならないように実際の価格を取り除くことを覚えておいてほしい。
05:11.980 --> 05:14.950
そして、 その価格を埋めるのが仕事だ。
05:14.950 --> 05:19.810
そして、 もしそれが何を記入することになっているのか知りたければ、 うーん、 トレーニングポイントのためにそれを取るよ。
05:19.960 --> 05:25.360
電車に乗ったら、 そのまま値段を言えばいい。
05:25.360 --> 05:34.030
そして、 これが実際の価格であり、 この価格に関連するものである。
05:34.120 --> 05:36.700
しかし、 本当の値段は少し違う。
05:36.700 --> 05:43.090
この訓練とテストの方法、 訓練項目とテスト項目のリスト、 そしてそれらをどのように呼ぶかについて、
05:43.240 --> 05:51.280
記憶を呼び覚ますことができれば幸いだ。
05:51.490 --> 05:58.510
このコードの塊は、 あなたのプロジェクトで正確にこのコードを使うことはないかもしれないが、
05:58.540 --> 06:03.280
似たようなことはできるだろう。
06:03.280 --> 06:12.800
だから、 これは一種の原理原則であり、 問題に取り組むための素晴らしい方法であり、 あなた自身の問題にも応用できるはずだ。
06:12.800 --> 06:21.200
だから、 私たちが考え出したさまざまなモデルを、 本当に素早くシンプルな方法でテストできるようにしたかった。
06:21.410 --> 06:28.850
テストデータの束をモデルに通し、 その結果を視覚化するんだ。
06:28.850 --> 06:38.180
結局、 同じことを何度も繰り返したくなるので、 コードを何度もコピー・アンド・ペーストしなければなりませんでした。
06:38.180 --> 06:44.780
そうする時はいつでも、 自分のために何らかのユーティリティを構築する時だと思う。
06:44.900 --> 06:50.930
それで私が考えたのがこのクラス・テスターで、
06:50.930 --> 07:01.790
モデルをテストできるようにするものです。
07:01.790 --> 07:10.130
そして、 その唯一の仕事は、 アイテムを受け取り、 それに応答し、
07:10.130 --> 07:14.570
見積もり価格を返すことである。
07:14.570 --> 07:19.070
このような関数を書いたら、 あとはテスターを呼び出すだけだ。
07:19.100 --> 07:24.800
これから紹介するクラスは、 ドット・テストと関数名を渡す。
07:24.800 --> 07:26.720
そして、 この機能を使う。
07:26.720 --> 07:34.910
実際、 250の異なるテスト項目に対してこのテストを繰り返し実行し、 結果を予測する能力がどの程度あるかを調べ、
07:34.910 --> 07:38.600
その情報を視覚的にまとめて返す。
07:38.870 --> 07:39.980
そういうことだ。
07:39.980 --> 07:43.190
そして、 ワークフローを明確に簡素化することができる。
07:43.430 --> 07:45.410
ええと、 これは授業そのものです。
07:45.410 --> 07:46.460
至ってシンプルだ。
07:46.460 --> 07:48.650
色で対処しなければならないことがあるんだ。
07:48.650 --> 07:50.720
何色かプリントすると言ったはずだ。
07:50.720 --> 08:01.100
データ・ポイントを実行し、 そのデータ・ポイントを取得する。
08:01.130 --> 08:05.030
ここで、 あなたが提供した関数が呼び出される。
08:05.030 --> 08:08.730
モデルのモデルを取得するために、 データポイントとともに呼び出す。
08:08.730 --> 08:12.630
あなたの機能で、 その価値を推測してください。
08:12.630 --> 08:18.480
そして、 先ほど見た価格属性を呼び出すことで真実を得る。
08:18.480 --> 08:24.510
そして、 その誤差はもちろん、 推測と真実の絶対的な差である。
08:24.540 --> 08:25.980
簡単なことだ。
08:26.010 --> 08:37.410
また、 二乗対数誤差と呼ばれるものも計算され、 二乗対数誤差の公式はまさにここにある通りである。
08:37.440 --> 08:43.770
これは、 真実の対数プラス1から推測の対数プラス1を引いたものである。
08:44.160 --> 08:50.700
なぜ、 このプラス1が計算式にあるのかは、 想像がつくだろう。
08:50.700 --> 08:55.500
真実がゼロだったら、 数学はいらないからだ。 丸太が吹き飛ぶ。
08:55.560 --> 09:02.580
だからこの式は、 例えば、 真実や推測がゼロの場合にうまく機能する。
09:03.120 --> 09:08.790
対数誤差の2乗は、 もちろんこの2乗だ。
09:09.330 --> 09:14.400
それから、 ちょっと処理をするんだ。
09:14.400 --> 09:17.850
これからちょっとしたグラフを描くことができる。
09:18.030 --> 09:19.380
ええと、 報告書を書いてください。
09:19.380 --> 09:23.880
そしてこれが最終的に、 さっき言った機能なんだ。
09:23.880 --> 09:27.960
このテストを実行するにはtestを呼び出せばいい。
09:28.170 --> 09:28.740
オーケー。
09:28.770 --> 09:30.240
そのセルを実行させてくれ。
09:30.240 --> 09:35.160
だから、 このテストクラスで私がやったことのすべてを特に理解する必要はない。
09:35.160 --> 09:47.550
このような小さなテストハーネスを作成し、 それに少し時間を投資することで、 モデルを実行した結果について本当の洞察を得ることができるようになるという原則だ。
09:47.550 --> 09:49.080
それがここでの学びだ。
09:49.350 --> 09:54.450
では、 考えられる最もシンプルなモデルは何だろう?
09:54.450 --> 09:56.610
最もシンプルなモデルとは?
09:56.610 --> 09:59.250
本当のベースラインモデルを作る前に、 私たちは出てくるつもりだ。
09:59.250 --> 10:04.560
私たちは2つのお笑いモデルをやるつもりで、 想像しうる最も基本的なことをやるおバカなモデルだ。
10:04.560 --> 10:07.110
そして、 ちょっと挑戦させてほしい。
10:07.230 --> 10:12.760
可能な限りシンプルなモデルは何か考えてみてほしい。 おそらく、 それよりももっとシンプルなものになるだろう。
10:12.940 --> 10:16.900
ええと、 ではまず、 非常にシンプルな2つのモデルを紹介します。
10:16.900 --> 10:19.090
1つ目は、 すでに答えを明らかにしている。
10:19.090 --> 10:24.130
おそらく、 最初の1つは乱数を当てるだけだと見ただろう。
10:24.130 --> 10:25.540
それだけだ。
10:25.540 --> 10:27.640
これがその機能だ。
10:27.640 --> 10:31.090
プロンプトを受け取らない関数がある。
10:31.090 --> 10:39.520
そのアイテムを完全に無視し、 代わりに何を言われても気にしないようにするのだから。
10:39.520 --> 10:43.510
1から1000の間の乱数を返す。
10:43.690 --> 10:47.500
ええと、 すみません、 1~999の間です。
10:47.740 --> 10:53.320
ええと、 ランダムシードを設定して、 このテストを実行するたびに同じになるようにします。
10:53.440 --> 10:54.880
そして今、 我々はそれを実行している。
10:54.880 --> 11:00.730
このテストをもう一度実行するには、 テスター・クラスでドット・テストを実行します。
11:00.730 --> 11:03.700
そして、 単純にこの関数の名前を渡す。
11:03.700 --> 11:08.920
関数を呼び出さないのは、 もし関数を呼び出したら、 一度だけ呼び出してそれでおしまいだからだ。
11:08.950 --> 11:11.590
関数そのものをこのように渡す。
11:11.620 --> 11:17.350
そして今、 これを実行に移し、 私のプログラムの結果を見てもらう。
11:17.800 --> 11:20.800
このモデルは非常に素早いものだったからだ。
11:20.800 --> 11:24.280
だから、 上にスクロールし直して、 あなたがここで見ているものを教えようと思う。
11:24.790 --> 11:29.770
次の数回の授業で何度もやることになるので、 とても慣れることになる。
11:29.770 --> 11:37.060
つまり、 ここに表示されている各行は、 テスト・データの異なる1点を表している。
11:37.060 --> 11:40.270
そして、 この右側にあるアイテムが何であるかを教えてくれる。
11:40.270 --> 11:47.050
LEDライトキット、 ハンドヘルドLED。
11:47.050 --> 11:49.270
そしてその後、 短く切った。
11:49.270 --> 11:57.760
そして、 このLEDライトキットに表示されているのは、 LEDライトキットの機能を推測したモデルです。
11:57.760 --> 12:01.810
そして、 乱数ジェネレーターだから143ドルを当てた。
12:02.260 --> 12:03.760
真実とは何か?
12:03.760 --> 12:12.980
ちょっと驚くべきことに、 真実は289ドルで、 これは私が予想していたよりもむしろ高い。
12:12.980 --> 12:13.490
たぶんね。
12:13.790 --> 12:17.150
もしかしたら、 ノートパソコンが横に付いてくるかもしれない。
12:17.900 --> 12:19.190
それがエラーなんだ。
12:19.220 --> 12:23.330
それくらい、 このモデルは間違っている。
12:23.330 --> 12:26.930
対数誤差の2乗については、 また別の機会に説明することにしよう。
12:26.930 --> 12:32.630
しかし、 これは絶対的な誤差と相対的なパーセンテージの誤差の差をよりよく補正し、
12:32.630 --> 12:35.720
よりよく反映させるためのものだ。
12:35.870 --> 12:40.970
しかし、 私たちは何よりもこのことに焦点を当てるつもりだ。 なぜなら、 私たちにとって、
12:41.000 --> 12:45.920
人間にとって、 推測と真実の違いを理解するのはとても簡単だからだ。
12:46.310 --> 12:51.200
ええと、 赤で塗られているのは、 それが本当にひどい推測だと考えられているからです。
12:51.200 --> 12:53.270
だから赤は本当にひどい。
12:53.270 --> 12:56.210
黄色は......、 緑はまあまあかな。
12:56.210 --> 13:02.540
その定義は、 上にスクロールして戻ってみると、 経験則のようなものがある。
13:02.540 --> 13:06.710
私は、 40ドルか20%以内で当てたら緑と呼んでいる。
13:06.740 --> 13:09.950
40ドルか20%以内ならグリーンだ。
13:09.950 --> 13:17.510
40ドルというのはかなり気前がいいと思うかもしれないが、 ここでは値段の幅が大きく、 何かの説明を受けただけだということを覚えておいてほしい。
13:17.510 --> 13:20.420
そして、 これを実行するのは本当に難しい。
13:20.420 --> 13:25.250
だから、 40ドル以内で当てることができれば、 それは立派な仕事だと思う。
13:25.430 --> 13:28.070
だから、 望むならもっと厳しくすることももちろんできる。
13:28.070 --> 13:29.930
これを微調整するのはあなた次第だ。
13:30.080 --> 13:32.300
でも、 それが私の原則だった。
13:32.810 --> 13:35.180
では、 すべてのポイントを紹介しよう。
13:35.180 --> 13:38.630
そして最後には、 ちょっとした視覚化もある。
13:38.660 --> 13:40.730
では、 何が見えているのか。
13:40.760 --> 13:41.900
私はこの図が大好きだ。
13:41.930 --> 13:43.340
このような図をたくさん見ることになるだろう。
13:43.340 --> 13:44.960
だから、 これに慣れることだ。
13:44.990 --> 13:51.530
X軸は、 製品の実際の価値を示している。
13:51.560 --> 13:58.850
また、 データサイエンティストがyと表現するのを耳にすることもありますが、 この軸はデータサイエンティストが言うところのyハット、
13:58.850 --> 14:04.760
つまりモデルがどのような推定値を出したかを示しています。
14:04.760 --> 14:10.430
つまり、 製品の実際の真価に対するモデルの推定値を見ているのだ。
14:10.430 --> 14:17.940
つまり、 真の値は常に0から1000の範囲にある。
14:17.970 --> 14:20.520
完全にランダムな点の集合。
14:20.520 --> 14:26.310
この青い線は、 もちろん完全な推測の線を表している。
14:26.580 --> 14:34.920
もしモデルがこの青い線に沿って推測するようなことがあれば、 それはまさにグランド・トゥルース(地上真実)上にいることになり、 運がよかったと見ることができる。
14:34.920 --> 14:40.530
もちろん、 幸運に恵まれるのはわずかな時間であり、 青い線に近い緑色の点は、
14:40.530 --> 14:44.310
かなりうまくいっていることを表している。
14:44.550 --> 14:52.020
黄色い点は「A」、 赤い点はトリックが外れて右に出てしまった場合だ。
14:52.500 --> 14:54.690
ああ、 楽しかった。
14:54.690 --> 14:55.860
楽しんでいただけたなら幸いだ。
14:55.860 --> 15:00.750
もうひとつ、 とてもつまらないモデルがある。
15:00.750 --> 15:05.520
非常に基本的なモデルとして、 ええと、 私が思いついた本当に基本的なものの1つは、 すべてに対してゼロを推測しよう、
15:05.520 --> 15:09.060
あるいはすべてに対して1を推測しよう、 と思ったかもしれない。
15:09.330 --> 15:11.280
私たちはそれよりも少しマシなことができる。
15:11.310 --> 15:19.620
トレーニング・データ・セットを使って、 すべてのトレーニング・データ・セットにおける商品の平均価格はいくらか、 と言うことができる。
15:19.620 --> 15:22.710
というのも、 我々のモデルにはトレーニング・データセットが提供されているからだ。
15:22.710 --> 15:26.970
だから、 私たちはそれを一定の推測として考えることができる。
15:27.000 --> 15:33.930
学習データセットに含まれるあらゆるものの平均価格がすべてだと仮定しよう。
15:34.140 --> 15:40.470
基本的には、 トレーニングデータセットの価格を計算し、
15:40.470 --> 15:45.450
その平均を求めます。
15:45.450 --> 15:52.440
これで、 トレーニング・データ・セット内のあるポイントの平均価格が得られる。
15:52.470 --> 15:56.820
そして、 これが我々の非常に洗練されたモデルだ。
15:56.820 --> 16:02.220
繰り返しになるが、 これはアイテムを受け取り、 その平均値を返すだけである。
16:02.220 --> 16:05.940
そのため、 渡されたものはすべて無視され、 ただ平均値が返される。
16:05.940 --> 16:08.490
では、 これがどのようなものか見てみよう。
16:08.520 --> 16:13.170
これから見る図がどのようなものか、 頭の中に思い浮かべることができるかどうか試してみよう。
16:13.290 --> 16:17.320
どんな感じか想像できるかな?
16:18.190 --> 16:20.800
そして、 自分が正しいかどうかを確かめる準備ができているならね。
16:21.040 --> 16:21.790
バム!
16:21.790 --> 16:23.890
もちろん、 これがその図だ。
16:23.890 --> 16:32.920
もし500点だと思ったのなら、 分布がより安いものに偏っていることを覚えておいてほしい。
16:32.950 --> 16:35.170
元々ほどひどくはない。
16:35.200 --> 16:37.480
修正したが、 ほんの少しだ。
16:37.690 --> 16:41.620
ええと、 だから、 この金額は絶対にすべてに対して当てられたんだ。
16:41.950 --> 16:50.650
そしてもちろん、 それが製品の価値と同じになった時点で緑、 そうでなければ黄色か赤になった。
16:50.680 --> 16:53.140
だからスプレッドがある。
16:53.170 --> 16:56.590
そして、 期待通りの結果を見ることができる。
16:56.590 --> 17:02.080
実際の結果をスクロールバックしてみると、 赤の海が広がっており、
17:02.080 --> 17:07.240
平均に近い値段のものには時折緑が混じっているのがわかる。
17:08.050 --> 17:11.080
それでは、 楽しんでいただけたら幸いです。
17:11.080 --> 17:16.360
今のところ、 まだ実際の機械学習モデルを見ていないが、 心配しないでほしい。
17:16.390 --> 17:17.290
頑張るんだ。
17:17.380 --> 17:18.280
それではまた次回