質問編集履歴
3
タイトルや文章を修正しました
test
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2次関数に対するBiweight推定法のやり方がわかりません
|
1
|
+
【Python】2次関数に対するBiweight推定法のやり方がわかりません
|
test
CHANGED
File without changes
|
2
プログラムを一部修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -28,7 +28,6 @@
|
|
28
28
|
#シートの最終行を取得
|
29
29
|
Sheet_Max = len(df)
|
30
30
|
|
31
|
-
print(Sheet_Max)
|
32
31
|
|
33
32
|
#配列宣言
|
34
33
|
x_1 = df["xi"].to_list()
|
@@ -47,7 +46,7 @@
|
|
47
46
|
print(coe[0])
|
48
47
|
|
49
48
|
plt.scatter(x, y, color="k")
|
50
|
-
plt.plot(x,z2)
|
49
|
+
plt.plot(x,z2)
|
51
50
|
plt.show()
|
52
51
|
|
53
52
|
**表示結果
|
1
質問内容がわかりやすくなるよう追記しました。
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,7 +1,55 @@
|
|
1
1
|
Pythonについての質問です。
|
2
|
-
学校の課題で、2つのデータx,yの近似曲線、f(x)=a+b/x+c/(x^2)のa,b,cの値を最小二乗法とBiweight推定法を用いて求める
|
2
|
+
学校の課題で、2つのデータx,yの近似曲線、f(x)=a+b/x+c/(x^2)のa,b,cの値を最小二乗法とBiweight推定法(重さを追加して外れ値の影響を少なくする手法)を用いて求めるプログラムをかく課題が出されました。(x,yのデータはエクセルに用意されている)
|
3
|
+
|
4
|
+
そこで、最小二乗法でデータに沿った曲線をひくことはできたのですが、そこから重さを入れて計算をする方法がわかりません。
|
5
|
+
イメージとしては以下のサイトのような計算を2次関数でa,b,cの3つの変数を使ってやりたいと思っています。
|
6
|
+
URL:https://qiita.com/nn_tok/items/95a3baccacc492972fd4
|
7
|
+
|
8
|
+
|
3
9
|
|
4
10
|
自分なりにBiweight推定法について調べてみましたが、ネットにある記事だと1次関数を取り扱っているものしかなく、f(x)のような2次関数のものについてはどうしたらいいのかわからず、手詰まり状態です。
|
5
11
|
|
12
|
+
|
6
13
|
分かる方がいらっしゃいましたら、何卒お教えください。
|
7
14
|
※投稿主はPython初心者のため、できればわかりやすく説明していただけると助かります。
|
15
|
+
|
16
|
+
|
17
|
+
|
18
|
+
**現在のコード
|
19
|
+
**
|
20
|
+
import pandas as pd
|
21
|
+
import numpy as np
|
22
|
+
import matplotlib.pyplot as plt
|
23
|
+
import statistics as st
|
24
|
+
|
25
|
+
df = pd.read_excel("○○○.xlsx", sheet_name = "○○○", skiprows=9,usecols="B:C")
|
26
|
+
print(df)
|
27
|
+
|
28
|
+
#シートの最終行を取得
|
29
|
+
Sheet_Max = len(df)
|
30
|
+
|
31
|
+
print(Sheet_Max)
|
32
|
+
|
33
|
+
#配列宣言
|
34
|
+
x_1 = df["xi"].to_list()
|
35
|
+
|
36
|
+
y_1 = df["yi"].to_list()
|
37
|
+
|
38
|
+
x = np.array(x_1)
|
39
|
+
y = np.array(y_1)
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
coe = np.polyfit(x,y,2)
|
44
|
+
z2 = np.poly1d(coe)(x)
|
45
|
+
print(coe)
|
46
|
+
|
47
|
+
print(coe[0])
|
48
|
+
|
49
|
+
plt.scatter(x, y, color="k")
|
50
|
+
plt.plot(x,z2) #(0, b)地点から(xの最大値,ax + b)地点までの線
|
51
|
+
plt.show()
|
52
|
+
|
53
|
+
**表示結果
|
54
|
+
**![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-05-02/4834b404-116e-4fee-8356-969bccc94a5f.png)
|
55
|
+
|