1

問題がありますが、解決策は非常に単純であるべきだと思います。モデルを構築していて、10 分割交差検証によってその精度をテストしたいと考えています。これを行うには、トレーニング コーパス 90%/10% をトレーニング セクションとテスト セクションに分割し、90% でモデルをトレーニングし、10% でテストする必要があります。最終的にコーパスの各ビットがテスト データとして使用されるように、毎回異なる 90%/10% 分割を使用して、これを 10 回実行したいと考えています。次に、各 10% テストの結果を平均します。

トレーニング コーパスの 10% を抽出して新しいファイルに書き込むスクリプトを作成しようとしましたが、今のところうまくいきません。私が行ったことは、ファイル内の合計行数を数え、この数を 10 で割って、抽出する 10 個の異なるテスト セットのそれぞれのサイズを知ることです。

trainFile = open("danish.train")
numberOfLines = 0

for line in trainFile:
    numberOfLines += 1

lengthTest = numberOfLines / 10

私自身のトレーニング ファイルでは、それが 3638 行で構成されていることがわかったので、各テストはおよそ 363 行で構成される必要があります。

1 行目から 363 行目、364 行目から 726 行目などを別のテスト ファイルに書き込むにはどうすればよいですか?

4

3 に答える 3

1

テストされていませんが、基本的な考え方は次のとおりです。

def getNthSeg(fpath, n, segSize):
    """Get the nth segment of segSize many lines"""
    answer = []
    with open(fpath) as f:
        for i,line in enumerate(f):
            if (segSize-1)*n <= i < segSize*n:
                answer.append(line)
    return answer

def getFolds(fpath, k):
    """ In your case, k is 10"""
    with open(fpath) as f:
        numLines = len(f.readlines())
    segSize = numLines/k
    answer = []
    for n in xrange(k):
        fold = getNthSeg(fpath, n, segSize)
        answer.append(fold)
    return answer
于 2013-02-05T18:50:27.517 に答える
1

行数を取得したら、ファイルの先頭に戻り、行のコピーを に開始しますdanish.train.part-01。行番号が 10% テスト セットのサイズの倍数である場合は、次の部分のために新しいファイルを開きます。

#!/usr/bin/env python2.7

trainFile = open("danish.train")
numberOfLines = 0

for line in trainFile:
    numberOfLines += 1

lengthTest = numberOfLines / 10

# rewind file to beginning
trainFile.seek(0)

numberOfLines = 0
file_number = 0
for line in trainFile:
    if numberOfLines % lengthTest == 0:
        file_number += 1
        output = open('danish.train.part-%02d' % file_number, 'w')

    numberOfLines += 1
    output.write(line)

この入力ファイルについて (デンマーク語が話せなくてすみません!):

one
two
three
four
five
six
seven
eight
nine
ten
eleven
twelve
thirteen
fourteen
fifteen
sixteen
seventeen
eighteen
nineteen
twenty
twenty-one
twenty-two
twenty-three
twenty-four
twenty-five
twenty-six
twenty-seven
twenty-eight
twenty-nine
thirty

これにより、ファイルが作成されます

danish.train.part-01
danish.train.part-02
danish.train.part-03
danish.train.part-04
danish.train.part-05
danish.train.part-06
danish.train.part-07
danish.train.part-08
danish.train.part-09
danish.train.part-10

たとえば、パート 5 には次の内容が含まれます。

thirteen
fourteen
fifteen
于 2013-02-05T18:50:50.823 に答える
1

ファイルが大きくない場合は、次のように 90/10 に分割できます。

trainFile = open("danish.train")
lines = list(trainFile)
N = len(lines)
testing = lines[:N/10]
training = lines[N/10:]
于 2013-02-05T18:54:04.240 に答える