わからない正確には私は包括的にしようとします。いくつかのステップがあります:
- ファイルのリストは、トレーニングとテストにファイルに
- 分割ファイルをランダム取得すること
- が事
1.取得を行います設定しますファイルのリスト
あなたのファイルはすべて、拡張子が.data
で、すべてがフォルダ0になっているとします。我々がしたいことは、これらのファイルすべてのリストを取得することです。これは、os
モジュールで簡単に実行されます。私はサブディレクトリがないと仮定しています。もしあれば、これは変わるだろう。
import os
def get_file_list_from_dir(datadir):
all_files = os.listdir(os.path.abspath(datadir))
data_files = list(filter(lambda file: file.endswith('.data'), all_files))
return data_files
我々はget_file_list_from_dir('/ml/data')
を呼び出すことだったのであれば、私たちは、そのディレクトリ内のすべてのファイル.data
(グロブ/ml/data/*.data
へのシェルで相当)のリストを取り戻すでしょう。それはML分類器を訓練するために貧しい人々の道を考えられているよう
2.ランダム化ファイル
私たちは、サンプリングが予測可能になりたくありません。
from random import shuffle
def randomize_files(file_list):
shuffle(file_list)
注random.shuffle
はインプレースシャッフリングを行うので、既存のリストを修正すること。
3分割ファイルトレーニングにとテストが
を設定します。(あなたはそれがより多くの意味を作る作るために別の関数にこれを書くことができます。もちろん、あなただけのrandomize_files
の代わりにshuffle
を呼び出すことができますので、この機能はかなり愚かです)特定の数の文書の代わりに70:30の比率を仮定します。だから、:
from math import floor
def get_training_and_testing_sets(file_list):
split = 0.7
split_index = floor(len(file_list) * split)
training = file_list[:split_index]
testing = file_list[split_index:]
return training, testing
4.事
これは、各ファイルを開いて、あなたのトレーニングやテストを行うステップで行ってください。私はあなたにこれを残すよ!好奇心のうち
クロスバリデーション
、あなたはcross-validationを使用して検討していますか?これはデータを分割して、すべての文書をトレーニングとテストに使用する方法です。それぞれの「折りたたみ」で、トレーニングに使用するドキュメントの数をカスタマイズできます。私はあなたが好きならこれでもっと深く進むことができますが、あなたがそれをしたくなければ私はしません。
編集:申し訳ありませんが、私はこれをもう少し説明します。
私たちは1000文書のデータセットを持っています。クロスバリデーションの考え方は、すべてをトレーニングとテストの両方に使用できるということです。データセットを「折り畳み」と呼ぶものに分割しました。フォールドの数は、任意の時点でのトレーニングセットとテストセットのサイズを決定します。
10倍交差検証システムが必要だとします。つまり、トレーニングとテストのアルゴリズムは10回実行されます。初回は1-100のドキュメントを練習し、101-1000のテストを行います。 2番目のフォールドは101-200でトレーニングし、1-100と201-1000でテストします。
たとえば、40倍CVシステムの場合、最初の折り畳みは文書1-25で行い、26-1000でテストし、2番目の折り畳みは26-40で行い、1-25でテストし、 51-1000、およびそれ以降。
このようなシステムを実装するには、上記の手順(1)と(2)を実行する必要がありますが、手順(3)は異なります。トレーニング用とテスト用の2つのセットに分割する代わりに、関数をgeneratorにすることができます。この関数は、リストのように繰り返すことができます。
def cross_validate(data_files, folds):
if len(data_files) % folds != 0:
raise ValueError(
"invalid number of folds ({}) for the number of "
"documents ({})".format(folds, len(data_files))
)
fold_size = len(data_files) // folds
for split_index in range(0, len(data_files), fold_size):
training = data_files[split_index:split_index + fold_size]
testing = data_files[:split_index] + data_files[split_index + fold_size:]
yield training, testing
最後にキーワードyield
がこれを発電機にしています。
def ml_function(datadir, num_folds):
data_files = get_file_list_from_dir(datadir)
randomize_files(data_files)
for train_set, test_set in cross_validate(data_files, num_folds):
do_ml_training(train_set)
do_ml_testing(test_set)
また、MLシステムの実際の機能を実装するのはあなた次第です。
免責事項として、私はいかなる専門家でもありません。しかし、私がここに書いたことについてあなたが何か質問があれば教えてください!
あなたが例を挙げてやりたいために利用可能な多くの機能を持って学ぶScikit。あなたがそれらを適用する際に問題を見つける場合は、ネットを検索し、ここに投稿してください –
質問に間違いありませんか?会員が質問を下落させる理由は? –
Stackoverflowは意見を表明するためのものではありません。それはプログラミングのためです。あなたは単に何の努力もしないで尋ねているだけです。 –