初めまして。理系大学生です。プログラミングにはほとんど触れたことはなく勉強しながら取り組んでいるような感じです。
実験データを解析するためにプログラミングに取り組んでいます。重み付き回帰分析を考えており、重みのあるデータを1次直線でフィッティングするのがゴールです。
csvファイルの1列目にx軸情報、2列目にy軸情報、3列目に重み(w)がずらっと並んでいます。
この3列をある配列に入れたいとことで止まっています。
配列[x][y]=重み(w) のようにしたいと考えております。
回帰分析の計算過程はわかっているのであとはcsvから配列に入れる事ができれば、、って感じです。
こんなことを質問して申し訳ないです。
具体的な書き方も教えていただけたら幸いです。
どなたか助けていただけないでしょうか。
何卒よろしくお願い致します。
Visualstudioでc++です。
> 配列[1][4.01]など配列の要素?に小数を入れることは出来ないですよね。
> 回帰分析の計算モデルは出来ているので、あとはcsvから配列に入れる事ができれば
そのできてる「回帰分析の計算モデル」というのは、配列の添字に整数ではなく浮動小数点実数が付いてるのを想定して作られているのですか?
(そんなのどうやって作るのだろう??)
> 右肩上がりのデータ
なら、CSVの画像から想像すると、
> csvファイルの1列目にx軸情報、2列目にy軸情報、3列目に重み(w)
ではなく、CSVは
重み、x、y
の順番では?
申し訳ございませんでした。
計算モデルができているというのは、大きく言い過ぎたかもしれません。配列に入れる事が出来たら、どのように計算すればいいかはわかっている、入れる事ができたのなら、あとは自分で進めることができそうということでした。
小数部分は×100などして整数に直します。
紛らわしい部分は修正させて頂きます。
申し訳ございませんでした。
これもまた失礼いたしました。
仮のデータと今後想定している実験データの話が混ざってしまいました。このcsv(仮データ)を作成した際に計算結果が正しいかと確認するためにわざとこの順番にしています。
ですので、このcsvファイルではx,y,重みの順番で問題ないです。
よろしくお願い致します。
「重み付き回帰分析」とは、
https://eip.econ.kanagawa-u.ac.jp/eip/2007/regression.pdf
の10ページの「2.2.2 重み付き最小2乗法」とかに書かれてるような、2乗和を計算するときに
Σ(w * (y - f(x)))
のようにして重み「w」を掛け算する方法のことでしょうか?
もしそうなら、
x, y, w
の組み合わせをデータサンプル数分使って計算するので、素直にCSVファイルから
x, y, w
をそのまま読み込んだらいいと思うのですが
> このcsvファイルではx,y,重みの順番で問題ない
「このCSVファイル」というのが質問の画像のなら、1列目の「x」が(画像で見える範囲では)全部「1」なので、
> 右肩上がりのデータ
ではないと思うのですが
わざと間違えたデータを作って、それを質問の画像に掲載したのなら、そんなこと止めてください
質問に掲載されたデータで処理したいと思いっていると、他人は普通はそう理解します
ご返信ありがとうございます。
仰る通り重みを掛け算することを考えておりました。
想定している実験では、重みwの値が波のように(例えば、4,2,3,4,5,6,4,3,2,1,3,4,5,6,7,5,4,3,2,,,)なっており、その重みをみて、最小と最小の間のデータ(谷間)だけ取り出すことを想定しており(上の例だと,2,3,4,5,6,4,3,2,1の部分)w-1>w, w<w+1のような感じです。伝わりましたでしょうか。
文章だと伝えるのが難しいのですが、領域を選択する際にもやはり配列に入れる事がいちばん簡単なのかなと考えております。
どうでしょうか。よろしくお願い致します。
> 小数部分は×100などして整数に直します。
私には、x, yを配列の添字にするメリットが分かりませんけど、その方がいいと思うのなら、やってみたらいいのではないですかね
x, yを配列の添字にしたら、使われてる添字が飛び飛びの歯抜けの配列になって、実際のデータ数よりもかなりサイズが大きな配列が必要になって、メモリーの効率が悪くなるような気がします
また、配列のどの要素にデータが入ってるのかが分からないと、大量にある(かもしれない)データが入ってない配列の要素を不必要に読み込むことになり、速度的にも効率が悪くなるような気がします
処理するデータ数がちょっとしか無いとか、100倍したx, yがかなり連続してるのなら、大丈夫かもしれないけど、x, yの数値次第ですよね
> csvは500行のデータがある
私なら、CSVをそのまま
CSVの1行目のデータ:x[0], y[0], w[0]
CSVの2行目のデータ:x[1], y[1], w[1]
(中略)
CSVの499行目のデータ:x[498], y[498], w[498]
CSVの500行目のデータ:x[499], y[499], w[499]
に入れて処理します
アドバイスありがとうございます。
そして色々失礼致しました。
取り組んでみます。
回答1件
あなたの回答
tips
プレビュー