python2.7で競馬のデータを用いて、機械学習を勉強しております。
学習データにおきまして、正例と負例の偏りが大きいと上手く考えないため、学習データの負例を間引いて、正例と負例を1:1になるように、調整する方法が分からず、苦慮しております。
こちらが、自力で作ったソースコードでございます。
# -*- coding: utf-8 -*- import numpy as np import pandas as pd import random # 表示する行数を設定 pd.options.display.max_rows=5 #訓練データ jockey = pd.read_csv("pre_jockey1.csv" , sep=",") # 特徴データとラベルデータを取り出す jockey_except_arrival = jockey.drop("arrival", axis=1) features = jockey_except_arrival.as_matrix() targets = jockey['arrival'].as_matrix() jockey.loc[random.sample(jockey.index, 5)] print jockey.loc[random.sample(jockey.index, 5)]
pre_jockey1.csv の中身はこちらでございます
season weather race_num distance baba horse_weight arrival 6 1 10 1800 1 466 0 6 2 1 1400 1 472 0 6 1 2 1200 1 502 1 6 1 6 1800 2 452 0 6 1 1 1200 2 468 0 5 1 10 1400 1 486 0 5 1 5 1200 1 520 0 5 1 7 1400 1 462 0 5 1 4 1600 1 490 0 5 1 12 1800 1 466 1 5 1 6 1800 1 512 0 5 1 5 1200 1 486 0 5 1 2 1800 1 498 0 5 1 12 1200 1 488 0 5 1 7 1200 2 472 0 5 1 11 1200 1 480 0 5 1 2 1800 1 500 0 5 2 12 1800 1 468 0 5 2 3 1900 1 452 0 4 1 3 1800 1 520 0 4 1 1 1800 1 472 0 4 2 7 1200 2 474 0 4 2 5 1600 1 462 0 4 1 3 1200 1 416 0 4 1 2 1800 1 476 0 4 1 1 1200 1 484 0 4 1 12 1400 1 468 0 4 1 3 1900 2 456 0
上記のcsvファイルの行数が例えば、おおよそ700行あるといたします。
自力のソースコードは、おおよそ700行の中から、正例も、負例も考えず、ただ、5サンプルランダムに抽出し、printしただけのものでございます。
競馬データでございますので、少し説明いたしますと、目的変数のarrivalは3着以内なら 1 4着以下なら 0 にしております。
正例が 1 、負例が 0 としますと、当然ながら、負例の 0 が多くなります。
ここから、発展させまして、ファイルの中の正例、つまり 1 の行数を読み取り、 その行数と同じ行数の負例をランダムに抽出して、
正例:負例 = 1:1 に調整する、 そして作成したデータを、別の例えば horse_1 と名づけた、CSVファイルに保存する。
これらの作業を行ってくれるソースコードが分からず、苦慮しております。
先輩方の御教示、よろしくお願いいたします。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/07/06 19:42