2022-10-30 (Sun) [長年日記]
_ Rubyで理解する統計解析の基礎: 3章
numo-gslにpolyfitがなさそうなのと、rb-gslのインストールにRuby 3.xだと失敗するので、3章の途中からあきらめてPyCallを使った。
poly_fit = Numpy.polyfit(english_scores, math_scores, 1)
poly_1d = Numpy.poly1d(poly_fit)
xs = Numpy.linspace(english_scores.min, english_scores.max)
ys = poly_1d.(xs)
だとysがpoly1d([37. , 37.85714286, 38.71428571, ...
になってしまって関数が適用されないので
ys = Numpy.array(xs.to_a.map { |x| poly_fit[0] * x + poly_fit[1] })
としたけど何かもっといい方法がありそうな気がする。
10/31追記
Numpy.poly1dは関数風のクラスを返すようで、
poly_1d = Numpy.poly1d.(poly_fit)
のように .()
を使用したら poly_1d.(xs)
で期待した結果を得られた。
クラスなので、 Numpy.poly1d.(poly_fit)
は Numpy.poly1d.new(poly_fit)
でもよいようだ。