拟合
一元线性拟合
python画图代码
import matplotlib
.pyplot
as plt
import pandas
as pd
def Unary_linear_fitting(arr_x
, arr_y
):
x_average
= 0
y_average
= 0
for i
in range(len(arr_x
)):
x_average
= x_average
+ arr_x
[i
]
y_average
= y_average
+ arr_y
[i
]
x_average
= x_average
/ len(arr_x
)
y_average
= y_average
/ len(arr_y
)
temp1
= 0
temp2
= 0
for i
in range(len(arr_x
)):
temp1
= temp1
+ (arr_x
[i
] - x_average
) * (arr_y
[i
] - y_average
)
temp2
= temp2
+ (arr_x
[i
] - x_average
) * (arr_x
[i
] - x_average
)
b
= temp1
/ temp2
a
= y_average
- b
* x_average
return a
, b
data
= pd
.read_csv
("大学男生身高体重数据.csv")
height
= data
["身高"]
weight
= data
["体重"]
a
, b
= Unary_linear_fitting
(height
, weight
)
print(a
, b
)
plt
.plot
([160, 195], [160 * b
+ a
, 195 * b
+ a
], label
='Unary_linear_fitting')
plt
.title
("Unary_linear_fitting")
plt
.scatter
(height
, weight
, label
='The original data')
plt
.legend
(loc
="upper left")
plt
.xlabel
("height")
plt
.ylabel
("weight")
plt
.show
()
多元线性拟合
多项式拟合
python画图代码
from scipy
import linalg
import numpy
as np
import numpy
.matlib
import matplotlib
.pyplot
as plt
def Multiple_linear_fitting(arr_x
, arr_y
):
m
= np
.array
(arr_x
).shape
[0]
average_y
= np
.mean
(arr_y
)
x_len
= len(arr_x
)
x_matrix
= np
.matlib
.zeros
((m
, 1))
for i
in range(m
):
xx_len
= len(arr_x
[0])
for j
in range(xx_len
):
x_matrix
[i
] = x_matrix
[i
] + arr_x
[i
][j
]
x_matrix
[i
] = x_matrix
[i
] / xx_len
ly
= np
.matlib
.zeros
((m
, 1))
ll
= np
.matlib
.zeros
((m
, m
))
for i
in range(m
):
for j
in range(m
):
for n
in range(len(arr_x
[0])):
ll
[i
, j
] = ll
[i
, j
] + (arr_x
[i
][n
] - x_matrix
[i
, 0]) * (arr_x
[j
][n
] - x_matrix
[j
, 0])
for k
in range(len(arr_x
[0])):
ly
[i
] = ly
[i
] + (arr_x
[i
][k
] - x_matrix
[i
, 0]) * (arr_y
[k
] - average_y
)
a
= linalg
.solve
(ll
, ly
)
a0
= 0
for i
in range(len(arr_x
[0])):
a0
= a0
+ arr_y
[i
]
for i
in range(m
):
temp
= 0
for j
in range(len(arr_x
[0])):
temp
= temp
+ arr_x
[i
][j
]
temp
= temp
* a
[i
]
a0
= a0
- temp
a0
= a0
/ len(arr_x
[0])
return a0
, a
x_arr
= [[-2, -1, 0, 1, 2], [4, 1, 0, 1, 4]]
y_arr
= [0, 1, 2, 1, 0]
a0
, a
= Multiple_linear_fitting
(x_arr
, y_arr
)
print(-3/7)
print(58 / 35)
print(a0
)
print(a
)
x
= np
.linspace
(-2, 2, 100)
y
= [0 for j
in range(len(x
))]
for i
in range(len(y
)):
y
[i
] = a0
+ a
[0] * x
[i
] + a
[1] * x
[i
] * x
[i
]
plt
.scatter
(x_arr
[0], y_arr
, label
='The original data')
plt
.plot
(x
, y
, label
='Polynomial fitting')
plt
.title
('Polynomial fitting')
plt
.legend
(loc
="upper left")
plt
.xlabel
("x")
plt
.ylabel
("y")
plt
.show
()
转载请注明原文地址:https://blackberry.8miu.com/read-45972.html