はじめに
TABLESAMPLE句を利用すると任意のテーブルやビューから、無作為にデータをサンプリングすることができます。例えば、機械学習のためのデータを準備する際にTABLESAMPLE句を利用して、学習データ/テストデータの分割を行うことができます。
TABLESAMPLE
コマンド構文
1 |
dbadmin=> SELECT 列名 FROM 対象データ TABLESAMPLE(抽出パーセント); |
利用例
例としてirisテーブルのデータを機械学習で利用するために、TABLESAMPLE句を使用して学習データとテストデータに分割します。・学習データ:iris_studyに格納
・テストデータ:iris_testに格納
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
1) irisテーブルには100件のデータが格納されています。 dbadmin=> SELECT * FROM iris LIMIT 10; id | Sepal_Length | Sepal_Width | Petal_Length | Petal_Width | Species ----+--------------+-------------+--------------+-------------+--------- 1 | 5.1 | 3.5 | 1.4 | 0.2 | setosa 2 | 4.9 | 3 | 1.4 | 0.2 | setosa 3 | 4.7 | 3.2 | 1.3 | 0.2 | setosa 4 | 4.6 | 3.1 | 1.5 | 0.2 | setosa 5 | 5 | 3.6 | 1.4 | 0.2 | setosa 6 | 5.4 | 3.9 | 1.7 | 0.4 | setosa 7 | 4.6 | 3.4 | 1.4 | 0.3 | setosa 8 | 5 | 3.4 | 1.5 | 0.2 | setosa 9 | 4.4 | 2.9 | 1.4 | 0.2 | setosa 10 | 4.9 | 3.1 | 1.5 | 0.1 | setosa (10 rows) dbadmin=> SELECT COUNT(*) FROM iris; COUNT ------- 100 (1 row) 2) TABLESAMPLE句を利用してirisテーブルから70%のデータを抽出しiris_studyテーブルに格納します。 dbadmin=> CREATE TABLE iris_study AS SELECT * FROM iris TABLESAMPLE(70); 3) iris_studyテーブルに格納されていない残りのデータをiris_testテーブルに格納します。 dbadmin=> CREATE TABLE iris_test AS SELECT * FROM iris WHERE id NOT IN(SELECT id FROM iris_study); CREATE TABLE 4) iris_studyテーブルには73件、iris_testテーブルには27件のデータが格納されました。 dbadmin=> SELECT COUNT(*) FROM iris_study; COUNT ------- 73 (1 row) dbadmin=> SELECT COUNT(*) FROM iris_test; COUNT ------- 27 (1 row) |
なお、TABLESAMPLE句で返される行数は指定したパーセントに対して厳密ではなくおおよその行数で、実行する度に変わります。
例)TABLESAMPLE(70)を複数回実行した場合の結果
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
dbadmin=> SELECT count(*) FROM iris TABLESAMPLE(70); count ------- 67 (1 row) dbadmin=> SELECT count(*) FROM iris TABLESAMPLE(70); count ------- 71 (1 row) dbadmin=> SELECT count(*) FROM iris TABLESAMPLE(70); count ------- 70 (1 row) |
参考情報
Sampling Datahttps://my.vertica.com/docs/9.1.x/HTML/index.htm#Authoring/AnalyzingData/MachineLearning/DataPreparation/SamplingData.htm
検証バージョンについて
この記事の内容はVertica 9.1で確認しています。- 投稿タグ
- サンプリング, 学習データ, テストデータ, 機械学習, Machine Learning