[PYTHON] Numpy를 사용한 대형 데이터 세트 다항식 피팅
PYTHONNumpy를 사용한 대형 데이터 세트 다항식 피팅
원시 데이터에 2 차 다항식을 맞추고 Matplotlib을 사용하여 결과를 출력하려고합니다. 내가 맞추려고하는 데이터 세트에는 약 백만 포인트가 있습니다. 웹을 통해 많은 예제를 사용할 수있어 간단해야합니다. 그러나 웬일인지 나는 그것을 올바르게 이해할 수 없다.
다음과 같은 경고 메시지가 나타납니다.
이것은 내 결과입니다.
이것은 Excel을 사용하여 출력됩니다.
내 코드는 아래를 참조하십시오. 나는 무엇이 없는가 ??
xData = df['X']
yData = df['Y']
xTitle = 'X'
yTitle = 'Y'
title = ''
minX = 100
maxX = 300
minY = 500
maxY = 2200
title_font = {'fontname':'Arial', 'size':'30', 'color':'black', 'weight':'normal',
'verticalalignment':'bottom'} # Bottom vertical alignment for more space
axis_font = {'fontname':'Arial', 'size':'18'}
#Poly fit
# calculate polynomial
z = np.polyfit(xData, yData, 2)
f = np.poly1d(z)
print(f)
# calculate new x's and y's
x_new = xData
y_new = f(x_new)
#Plot
plt.scatter(xData, yData,c='#002776',edgecolors='none')
plt.plot(x_new,y_new,c='#C60C30')
plt.ylim([minY,maxY])
plt.xlim([minX,maxX])
plt.xlabel(xTitle,**axis_font)
plt.ylabel(yTitle,**axis_font)
plt.title(title,**title_font)
plt.show()
해결법
-
==============================
1.플롯 할 배열을 정렬해야합니다. 다음은 정렬 된 배열과 정렬되지 않은 배열을 플로팅하는 것의 비교입니다. 정렬되지 않은 경우의 플롯은 완전히 왜곡되어 보입니다. 그러나 맞는 함수는 물론 동일합니다.
플롯 할 배열을 정렬해야합니다. 다음은 정렬 된 배열과 정렬되지 않은 배열을 플로팅하는 것의 비교입니다. 정렬되지 않은 경우의 플롯은 완전히 왜곡되어 보입니다. 그러나 맞는 함수는 물론 동일합니다.
2 -3.496 x + 2.18 x + 17.26
import matplotlib.pyplot as plt import numpy as np; np.random.seed(0) x = (np.random.normal(size=300)+1) fo = lambda x: -3*x**2+ 1.*x +20. f = lambda x: fo(x) + (np.random.normal(size=len(x))-0.5)*4 y = f(x) fig, (ax, ax2) = plt.subplots(1,2, figsize=(6,3)) ax.scatter(x,y) ax2.scatter(x,y) def fit(ax, x,y, sort=True): z = np.polyfit(x, y, 2) fit = np.poly1d(z) print(fit) ax.set_title("unsorted") if sort: x = np.sort(x) ax.set_title("sorted") ax.plot(x, fo(x), label="original func", color="k", alpha=0.6) ax.plot(x, fit(x), label="fit func", color="C3", alpha=1, lw=2.5 ) ax.legend() fit(ax, x,y, sort=False) fit(ax2, x,y, sort=True) plt.show()
-
==============================
2.문제는 아마도 x 축을 따라 0에서 약간 떨어진 위치로 옮겨지는 데이터에 대해 전력 기준을 사용하는 것입니다. numpy.polynomial에서 Polynomial 클래스를 사용하면 적합하기 전에 데이터의 크기를 조정하고 이동하여 도움이되며 축척과 사용 된 시프트를 추적 할 수 있습니다. 정규 형식의 계수를 원하면 해당 형식으로 변환해야합니다.
문제는 아마도 x 축을 따라 0에서 약간 떨어진 위치로 옮겨지는 데이터에 대해 전력 기준을 사용하는 것입니다. numpy.polynomial에서 Polynomial 클래스를 사용하면 적합하기 전에 데이터의 크기를 조정하고 이동하여 도움이되며 축척과 사용 된 시프트를 추적 할 수 있습니다. 정규 형식의 계수를 원하면 해당 형식으로 변환해야합니다.
from https://stackoverflow.com/questions/42998607/large-dataset-polynomial-fitting-using-numpy by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Cygwin에서 Pip-3.2 설치하기 (0) | 2018.11.15 |
---|---|
[PYTHON] django ORM을 사용하여 외래 키 필드에서 두 테이블을 어떻게 조인합니까? (0) | 2018.11.15 |
[PYTHON] 파이썬에서 열린 파일의 경로를 가져옵니다. (0) | 2018.11.15 |
[PYTHON] VectorAssembler의 출력에서 Spark ML의 열 이름으로 다시 기능을 매핑하는 방법은 무엇입니까? (0) | 2018.11.15 |
[PYTHON] 특이 매트릭스에 대한 효율적이고 비단뱀 체크 (0) | 2018.11.14 |