シンプルなNaive Bayesを使ってScikitを学習しています。Scikit-Learnでデータをロードするときにサンプルを持ち出すsklearn.datasets.load_files
本質的に、それぞれCat AとCat Bという名前の2つのフォルダがあり、それぞれが1,500個のテキストファイルで構成されています。
私はそうのような分類器を訓練するためにこれらのファイルをロードしています:
# Declare the categories
categories = ['CatA', 'CatB']
# Load the dataset
docs_to_train = sklearn.datasets.load_files("/Users/dh/Documents/Development/Python/Test_Data", description=None, categories=categories, load_content=True, shuffle=True, encoding='utf-8', decode_error='strict', random_state=0)
私は、例えば、テキストの短い文字列で分類器をテストしています
docs_new = ['This is test string 1.', 'This is test string 2.', 'This is test string 3.']
X_new_counts = count_vect.transform(docs_new)
X_new_tfidf = tfidf_transformer.transform(X_new_counts)
predicted = clf.predict(X_new_tfidf)
for doc, category in zip(docs_new, predicted):
print('%r => %s' % (doc, docs_to_train.target_names[category]))
すべてはそれがあるべきように動作しますが、私が本当にしたいことは密接にトレーニングデータに類似しているいくつかのデータに分類器をテストしています。理想的には、分類器を列車で使用しているデータ内にサンプルを保持し、それをクロスバリデーションしたいと思っています。
トレーニングデータセットのそれぞれから500奇数のドキュメントを別のフォルダに移動することができますが、サンプルを作成するより良い方法があるかどうかは疑問でした。
documentationは、これに関するガイダンスでは提示されていません。
完全なコードは次のとおりです。
import sklearn
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer
from sklearn.naive_bayes import MultinomialNB
from sklearn.pipeline import Pipeline
import numpy as np
from sklearn import datasets
from pprint import pprint
# Declare the categories
categories = ['CatA', 'CatB']
# Load the dataset
docs_to_train = sklearn.datasets.load_files("/Users/dh/Documents/Development/Python/Test_Data", description=None, categories=categories, load_content=True, shuffle=True, encoding='utf-8', decode_error='strict', random_state=0)
print len(docs_to_train.data)
# Vectorise the dataset
count_vect = CountVectorizer()
X_train_counts = count_vect.fit_transform(docs_to_train.data)
# Fit the estimator and transform the vector to tf-idf
tf_transformer = TfidfTransformer(use_idf=False).fit(X_train_counts)
X_train_tf = tf_transformer.transform(X_train_counts)
X_train_tf.shape
tfidf_transformer = TfidfTransformer()
X_train_tfidf = tfidf_transformer.fit_transform(X_train_counts)
print X_train_tfidf.shape
clf = MultinomialNB().fit(X_train_tfidf, docs_to_train.target)
docs_new = ['I am test string 1.', 'I am test string 2', 'I am test string 3']
X_new_counts = count_vect.transform(docs_new)
X_new_tfidf = tfidf_transformer.transform(X_new_counts)
predicted = clf.predict(X_new_tfidf)
for doc, category in zip(docs_new, predicted):
print('%r => %s' % (doc, docs_to_train.target_names[category]))
私はあなたがこのために探していると思う:[ 'sklearn.model_selection.train_test_split' '](http://scikit-learn.org/stable/modules/generated/sklearn .model_selection.train_test_split.html) – blacksite
ありがとうございます@not_a_robot、私はそれが私が後にしていることかもしれないと思う! – DanielH
完全な例が以下に掲載されています。 – blacksite