teratail header banner
teratail header banner
質問するログイン新規登録

質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.30%
scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

1回答

328閲覧

scikit-learnで一種類の説明変数しかなく、かつ説明変数の数が1組のデータごとに異なるデータセットでそのまま学習を行いたい。

Panthalassa

総合スコア1

scikit-learn

scikit-learnは、Pythonで使用できるオープンソースプロジェクトの機械学習用ライブラリです。多くの機械学習アルゴリズムが実装されていますが、どのアルゴリズムも同じような書き方で利用できます。

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

機械学習

機械学習は、データからパターンを自動的に発見し、そこから知能的な判断を下すためのコンピューターアルゴリズムを指します。人工知能における課題のひとつです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2025/05/22 12:51

編集2025/05/23 02:52

0

0

実現したいこと

当方scikit-learn及び機械学習を始めたての初心者です。

scikit-learnで、一種類の説明変数しかなく、かつ説明変数の数が1組のデータごとに異なるデータセットでそのまま学習(教師あり、線形、重回帰分析?)を行いたいと思っています。これが可能なのか、また、可能であれば実現方法を教えていただきたいです。

具体的には、競馬の任意の週の全てのレースの『走破タイムと平均タイムの差』(説明変数)を私が見て目的変数(その週ごとのタイムの傾向)を入力したデータセットで学習を行い、自動でその週のタイムの傾向を導きたいと思っています。
『平均タイムと走破タイムの差』という一種類の説明変数のカテゴリーのみがあり、週ごとに開催されるレース数が異なるため、説明変数の数が異なる、という具合なわけです。

一応仮に表的な表記をすると

##### レース1の平均差 レース2平均差 レース3平均差 週ごとのタイム傾向
5月第一週  -1.5       -1.6     +-0.0     A(本当は数値が入る)
5月第二週  -2.5       -3.0     存在しない   B (本当は数値が入る)
5月第三週  -1.7       存在しない  存在しない   C (本当は数値が入る)

このようになり、このようなデータで学習を行いたいわけです。
(ちなみに本当は1週の中で多ければレース数は15、少なければ8程度です。)

週ごとのレース数のバラツキが結構ありますし、欠損値を仮入力したりすると、感覚とズレた予測モデルになりそうなので、できればレース数が違う状態でそのまま処理したいんですが、どうすればよいでしょうか?

回答よろしくお願いします。

前提

ここに質問の内容を詳しく書いてください。
(例)
TypeScriptで●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

ソースコード

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

とりあえず時系列モデルについて調べてみました。ですが、どの時系列モデルの記事もCSVファイル読み込みの部分で、上記の『一応仮に表的な表記をすると』の部分のような形で、かつ欠損がないようなCSVファイルを読み込んでおり、今一番気になっているCSVファイルを読み込む際に、欠損を補正せずにどうCSVファイルを成型して読み込むか?という部分がわかりませんでした。

(できれば表形式で)ここを教えていただけるとありがたいです。すみませんがお願いします。
あと時系列モデルを使用する場合scikit-learnじゃなくて全然大丈夫です。うまくやれるならなんでもいいです。

あとこれは私の伝え方が悪かったかもしれないため、もしかしたら伝わってないかもしれないなと思ったので一応追記させていただきますが、やりたいことは、学習したモデルに、特定の土、日曜日、土日、などの範囲のみでの全レースの平均差を与え、その範囲のみでの総合的なタイム傾向を一数値として導く、って感じです。未来だけでなく過去の土日の範囲についても自動で導かせようと思っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

bsdfan

2025/05/23 12:59

目的変数の数値は質問者さんが入力しているとのことですが、どうやってその数値を算出するかは数式化できないのでしょうか?それとも、それはわかったうえで同じことを機械学習でやりたいということでしょうか?
Panthalassa

2025/05/24 07:26

コメントありがとうございます! 数式化をするために機械学習を使おうかな、というところですね。(Excelとかでもやりようによっては近似式を導けるのは知ってます) 加えて過去の週の入力も目で見ていちいち手入力するのがレース数が膨大すぎて面倒くさいので、機械学習モデルに自動で算出させようかなというところです。
meg_

2025/05/24 08:40

「目的変数の数値は質問者さんが入力しているとのことですが、どうやってその数値を算出するかは数式化できないのでしょうか?」に対して「数式化をするために機械学習を使おうかな、というところですね。」。加えて「加えて過去の週の入力も目で見ていちいち手入力するのがレース数が膨大すぎて面倒くさいので、機械学習モデルに自動で算出させようかなというところです。」ですか。 よく分かりませんが、説明変数も目的変数も予測値、さらにその関係性を学習させて未来を予測する。予測に予測を重ねることになりますので精度はかなり悪くなる(バラツキが大きくなる)ことが推測されます。単純なベースモデルよりも役に立たないのではないでしょうか?
Panthalassa

2025/05/24 09:23

説明変数は予測せずに全部過去の実際の数値を入力する形式です。 予測するのは目的変数だけです。
meg_

2025/05/24 09:33

> 数式化をするために機械学習を使おうかな、というところですね。(Excelとかでもやりようによっては近似式を導けるのは知ってます) 将来的に?上記をやろうとしていると思いましたが私の誤解でしょうか?
Panthalassa

2025/05/24 09:37

例えば、2024年の全ての週におけるタイム傾向、と、各週の全てのレースの平均差、を学習材料として、週ごとのタイム傾向を求めるモデルを作ったとして、説明変数さえ与えれば、過去の週における傾向も未来の週における傾向も自動で導けるのでは?という風に思っているという事です。 (誤解を与えてしまって申し訳ないです。いうてExcelとかで近似式導いて、その式に自動で必要な数値を組み込んで計算するプログラムを作る、のような方法でも出来そうだとは思います。)
bsdfan

2025/05/25 07:57

タイム傾向というのがどういうものなのかがわからないのでアドバイスしにくいのですが、機械学習でやってみたいというのが目的ならば、とりあえず、 ・欠損値をなんらかの値(平均とかゼロとか)で埋めたものでモデルを作ってみる ・同じデータ数だけのものでモデルを作ってみる あたりから試してみるといいのではないでしょうか。 (欠損値をそのままでうまくモデル化できそうなものは、ちょっと思いつきません。おそらく何らかの前処理は必要なのでは。)
guest

回答1

0

データセットの各データ行のデータ数が異なるのであれば時系列モデルを使用してはどうでしょうか?
株価予測の参考記事がネット上に色々ありますので調べてみると良いかと思います。
ただご所望の scikit-lean ライブラリで実現可能かは知りません。


あと時系列モデルを使用する場合scikit-learnじゃなくて全然大丈夫です。

ライブラリはいくつもありますので色々試してみてください。
参考:Pythonで簡単に時系列予測が行えるライブラリを試して比較してみた

うまくやれるならなんでもいいです。
時系列予測は難しい分野だと思います。トライ&エラーが必要かと思います。

投稿2025/05/22 15:45

編集2025/05/23 11:07
meg_

総合スコア10950

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Panthalassa

2025/05/22 18:09

回答ありがとうございます! とりあえず時系列モデルについて調べてみました。ですが、どの時系列モデルの記事もCSVファイル読み込みの部分で、上記の『一応仮に表的な表記をすると』の部分のような形で、かつ欠損がないようなCSVファイルを読み込んでおり、今一番気になっているCSVファイルを読み込む際に、欠損を補正せずにどうCSVファイルを成型して読み込むか?という部分がわかりませんでした。 (できれば表形式で)ここを教えていただけるとありがたいです。すみませんがお願いします。 あと時系列モデルを使用する場合scikit-learnじゃなくて全然大丈夫です。うまくやれるならなんでもいいです。 あとこれは私の伝え方が悪かったかもしれないため、もしかしたら伝わってないかもしれないなと思ったので一応追記させていただきますが、やりたいことは、学習したモデルに、特定の土、日曜日、土日、などの範囲のみでの全レースの平均差を与え、その範囲のみでの総合的なタイム傾向を一数値として導く、って感じです。未来だけでなく過去の土日の範囲についても自動で導かせようと思っています。
meg_

2025/05/23 10:48

> やりたいことは、学習したモデルに、特定の土、日曜日、土日、などの範囲のみでの全レースの平均差を与え、その範囲のみでの総合的なタイム傾向を一数値として導く、って感じです。未来だけでなく過去の土日の範囲についても自動で導かせようと思っています。 未来の予測でないなら分析するだけで良いのではないでしょうか?どのような統計モデルが適切かはちょっと分かりませんが。
meg_

2025/05/23 11:07

> 欠損を補正せずにどうCSVファイルを成型して読み込むか?という部分がわかりませんでした。 > あと時系列モデルを使用する場合scikit-learnじゃなくて全然大丈夫です。うまくやれるならなんでもいいです。 時系列モデルには欠損値を扱えるものと扱えないものがあるので何が適しているのか調べると良いかと思います。
Panthalassa

2025/05/24 09:15

今一番気になってるのは ##### レース1の平均差 レース2平均差 レース3平均差 週ごとのタイム傾向 5月第一週  -1.5       -1.6     +-0.0     A(本当は数値が入る) 5月第二週  -2.5       -3.0     存在しない   B (本当は数値が入る) 5月第三週  -1.7       存在しない  存在しない   C (本当は数値が入る) というデータがあったとして、時系列モデルを使うことで、このデータの形のまま学習ができるのか。 また、例えば ######### レースの平均差 週ごとの傾向(目的変数) 5月第一週1レース  -1.5      A(本当は数値が入る) 5月第一週2レース  -2.5     A(本当は数値が入る)    5月第一週3レース  -1.7      A(本当は数値が入る) 5月第二週1レース  -1.6      B(本当は数値が入る) 5月第二週2レース  -3.0     B(本当は数値が入る)  5月第三週1レース  +-0.0     C(本当は数値が入る) というように欠損値を排除したデータに変更したら学習、予測することができるのか。 そして、例えばここにデータ数(特徴量)の違う週の ######### レースの平均差 5月第四週1レース  -0.6 5月第四週2レース  -1.1 5月第四週3レース  -1.8 5月第四週4レース  +0.5 という説明変数を予測材料として与えることで、与えた期間(5月四週1~4レース)(過去の場合もある)における総合的なタイム傾向を一数値として導くことができるのか?という事です。 (学習段階でも予測段階でも)結局データ数が違う場合は(欠損値を架空の値で埋めたり、行、列ごと削除して)データ数をそろえる必要があるならば ######  最速平均差  平均差の平均(週の平均差の合計/週のレース数) 目的変数 5月第一週    -1.5         -1.0                  A  5月第二週    -2.5         -2.0                  B 5月第三週    -1.7         -1.2                  C のようにデータを変形する方法でやれば良いのでは?という話になってくるような気がしているので。 あと調べたんですが、時系列モデルで欠損値を埋めずにそのまま扱えるものには線形分析は入ってなかった(今回は教師ありで数値を導きたいので線形分析がいいのでは?と思っている(上述あり))のですが、時系列モデルでもうまいことやれるんですか? 初心者でよくわからない質問をしてるかもしれませんが、今聞きたいことはこんな感じです。
meg_

2025/05/24 09:38

> 時系列モデルでもうまいことやれるんですか? 実際にやってみるのが良いかと思います。やってみてチューニングしていくものかと思います。 > あと調べたんですが、時系列モデルで欠損値を埋めずにそのまま扱えるものには線形分析は入ってなかった(今回は教師ありで数値を導きたいので線形分析がいいのでは?と思っている(上述あり))のです 無知ですみませんが「線形分析」が分かりません。
Panthalassa

2025/05/24 09:45

すみません、線形回帰分析です。今回は重回帰分析になるのではないかと思ってます。 式が直線なのか曲線なのかは、予測してみないとわかりません。
meg_

2025/05/24 10:44

> 今回は重回帰分析になるのではないかと思ってます。 線形回帰で解けるのであればシンプルなので良いと思います。 > 式が直線なのか曲線なのかは、予測してみないとわかりません。 曲線を表現するには説明変数の工夫が必要ですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問