前提・実現したいこと
例えば、以下のサイトのような
http://uxmilk.jp/30240
線を描いた数値配列データ(例えば5個のデータ)を渡すと
・上昇から下降になった曲線
・ずっと上昇・下降
・下降から上昇になった曲線
のように、どのような線を描いているかを解析する作成したいと思っていますが、
どうやって作成したらいいのか教えて頂けないでしょうか。
どうぞよろしくお願い致します。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
LouiS0616さんの提案されている方法だと、numpyで簡単にできますね。
python
1import numpy as np 2>>> a = np.arange(10) 3>>> a 4array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]) 5>>> np.diff(a, n=1) 6array([1, 1, 1, 1, 1, 1, 1, 1, 1]) 7>>> np.diff(a, n=2) 8array([0, 0, 0, 0, 0, 0, 0, 0]) 9>>> b = np.arange(10) ** 2 10>>> b 11array([ 0, 1, 4, 9, 16, 25, 36, 49, 64, 81]) 12>>> np.diff(b, n=1) 13array([ 1, 3, 5, 7, 9, 11, 13, 15, 17]) 14>>> np.diff(b, n=2) 15array([2, 2, 2, 2, 2, 2, 2, 2])
恐らく現実的なデータで5点ということは考えづらいでしょうし、ノイズをどう考えるかという問題もあります。普通は解釈がむずい結果になるので、
- サンプリングして(データを間引いて)点の数を減らしたり、移動平均を取ってノイズを落としたりする
- さっさと多項式回帰などに突っ込む
- さっさとベジェ曲線、スプライン曲線などで近似する
色々なアプローチがあると思いますが、どれが良いのかは最終的にどんなアウトプットがほしいのかによります。
投稿2018/05/05 22:15
編集2018/05/05 22:15総合スコア30933
0
ベストアンサー
『5個のデータ』って、通過点の座標が5個ということでしょうか。
・(A) 上昇から下降になった曲線
・(B) ずっと上昇・下降
・(C) 下降から上昇になった曲線
・(D) それ以外
この四つの分類くらいなら難しくないですよ。機械的にやる分には。
前処理として、点が左から右に並ぶようにソートしておき、y座標のリストys
を作ります。
そして一階差分のリストdiv1_ys
と二階差分のリストdiv2_ys
の符号を見ます。
- (A)... div2_ysの符号が常に負である場合。
- (B)... div1_ysが符号が一定である場合。
- (C)... div2_ysの符号が常に正である場合。
- (D)... otherwise.
これで判別できる理由に関しては、高校数学の微分の知識である程度説明できるはずです。
一般の非線型回帰については、scipyで対処できるようす。Qiita - Pythonで非線形関数モデリング
投稿2018/05/05 16:34
編集2018/05/05 17:11総合スコア35658
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/05 16:59 編集
2018/05/06 01:13
2018/05/06 06:49
2018/05/07 11:20
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。