sklearn学習のローカルデータのロード


問題提起
pythonのサードパーティマシン学習ライブラリsklearnを使用して練習する場合、オンラインのデータ圧縮パッケージをダウンロードする必要があります.ダウンロードアドレスは海外にあるため、梯子がない前提でダウンロードするのは難しいか、数百兆のファイルをダウンロードするのに1、2時間かかるため、学習者の忍耐と情熱を消耗します.
本論文では,他の経路(梯子を登ったり,他人から提供されたネットワークディスクから)でデータ圧縮パケットをダウンロードした後,ローカルでダウンロードしたファイルをどのように導入(重点)し,機械学習のモデル訓練とテスト,予測を行うかという問題を提起する.
このケースの背景:sklearnを使用します.Datasetsでfetch_20 newsgroupsメソッドのダウンロードには多くの時間がかかるが、その後、トレーニングデータ圧縮パッケージ20 news-bydateをディスクを介してダウンロードした.tar.gz、ダウンロードしたファイル20 news-bydateをロードする方法について説明します.tar.gzで説明します.
環境情報:
pythonプログラムインストールパス:C:\Program Files\Python37オペレーティングシステム:windows10解決策
sklearnモジュール(パス「C:Program FilesPython 37Libsite-packagessklearn」)のソースコードを表示すると、fetch_20 newsgroupsメソッドはtwenty_newsgroups.pyファイル(パス「C:Program FilesPython 37Libsite-packagessklearndatasetstwenty_newsgroups.py」を呼び出します)の_download_20 newsgroupsメソッドは、このメソッドをいくつか修正すればよい.具体的には、元の内容を以下のように修正する.
    logger.info("Downloading dataset from %s (14 MB)", ARCHIVE.url)
    archive_path = _fetch_remote(ARCHIVE, dirname=target_dir)


次のように変更します.
    archive_path = os.path.join(target_dir,'20news-bydate.tar.gz')
    if not os.path.exists(archive_path):
        logger.info("Downloading dataset from %s (14 MB)", ARCHIVE.url)
        archive_path = _fetch_remote(ARCHIVE, dirname=target_dir)

変更後、ファイルを保存します.
コードの説明:
圧縮パッケージファイルをダウンロードする前に、対応する場所(具体的な経路は後述)の圧縮パケットファイルが既に存在するかどうかを検出し、存在する場合はダウンロードプロセスをスキップし、存在しない場合はダウンロードする.では、対応する場所はどこを指すのか、ここではdata_homeというパラメータ名、ファイルフォルダ名のパラメータ値を入力する必要がある(例えばscikit_learn_data)_download_20 newsgroupsメソッドは、fetch_20 newsgroupsメソッドにファイル名を渡すものであり、スクリプトファイル(完全な名前「g:test.py」)を呼び出す前に、フォルダ(g:scikit_learn_data20 news_home)を確保(または確立)する必要がある)が存在し、ダウンロードしたファイル20 news-bydate.tar.gzをフォルダに入れると、ファイル(「g:scikit_learn_data20 news_home20 news-bydate.tar.gz」)が存在することを確認します.
次に、呼び出しスクリプトの例を示します.
from sklearn.datasets import fetch_20newsgroups
from sklearn.naive_bayes import MultinomialNB
from sklearn.feature_extraction import text

def Naive_Bayes():
    nb=MultinomialNB()
    datas=fetch_20newsgroups(subset="all", data_home="scikit_learn_data")
    x_train, x_test, y_train, y_test = train_test_split(datas.data, datas.target, test_size=0.25)
    tf=text.TfidfVectorizer()
    x_train = tf.fit_transform(x_train)
    x_test = tf.transform(x_test)
    nb.fit(x_train, y_train)
    y_predict = nb.predict(x_test)
    score = nb.score(x_test,y_test)
    print(score)



if __name__ == '__main__':
    Naive_Bayes()


上記の方法は例にすぎないが、一定の汎用性があり、興味のある方はsklearnの修正を参考にすることができる.Datasetsの他の方法.