linear approxmation

python으로 데이터를 근사 함수로 바꾸는 명령이 있다. polyfit. 대박이다!

Python 3.5.2 (default, Jul 10 2019, 11:58:48) 
[GCC 5.4.0 20160609] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy as np
>>> x=np.arange(0,4)
>>> y=np.array([0,1,1.9,3.1])
>>> np.polyfit(x,y,1)
array([ 1.02, -0.03])
>>> np.polyfit(x,y,2)
array([0.05, 0.87, 0.02])

인터넷에서 구한 sine 데이터로 근사 함수를 구해봐야 겠다.

#_*_ coding: utf-8 _*_
import matplotlib
matplotlib.use('Agg')

import numpy as np
from sklearn.preprocessing import PolynomialFeatures

import csv 
import tensorflow as tf
import matplotlib.pyplot as plt 
import pandas as pd

from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Dropout
from keras.callbacks import ModelCheckpoint

print ("Package Loaded")
print ("데이터로 함수 근사하기")

ipd = pd.read_csv("./sine.csv")
print (ipd.head())
print (ipd.shape)

#column 선택.
time=ipd.iloc[:,0].array
sineValue=ipd.iloc[:,1].array
#print(type(time))
#print(time)
#print(time)
#print(sineValue)
approxFunc = np.polyfit(time,sineValue,6, full=False)
print(approxFunc)

처음에 5,000개를 모두 시키니 애가 이상한 짓을 한다. 사인 웨이브 크기가 1이고 0.001 단위로 쪼갰다. 파랑색 선이 내가 예상한 그림인데 애가 작고 너무 티 안나게 그렸다. 오차를 줄이려 노력하다 보니 아무것도 아닌 그래프를 그렸다.

이번에는 앞에 몇 개 잘랐다.

tf-docker /home/tensorflow/tutorial/ItnSensor > cat sine.csv
0,0.841470985
0.001,0.873736397
0.002,0.90255357
0.003,0.927808777
0.004,0.949402346
0.005,0.967249058
0.006,0.98127848
0.007,0.991435244
0.008,0.997679266
0.009,0.999985904
0.01,0.998346054
0.011,0.992766189
0.012,0.983268329
0.013,0.969889958
0.014,0.952683874
0.015,0.931717983
0.016,0.907075026
0.017,0.878852258
0.018,0.847161063
0.019,0.812126509
0.02,0.773886863
0.021,0.73259304
0.022,0.688408006
0.023,0.64150614
0.024,0.592072543
0.025,0.540302306
0.026,0.486399742
0.027,0.430577581
0.028,0.373056127
0.029,0.314062391
0.03,0.253829194
0.031,0.192594249
0.032,0.130599223

이렇게 하면 좀 비슷하게 그린다. 입력으로 준 수치가 (0.032, 0.1305..)에서 끊어져 애는 끝까지 아래로 간다고 생각하나 보다.

특정 부분을 보고 특징을 뽑아내야 하는데, 그냥 인공지능 하나 만들어서 하는게 낫다. 에러, 정확도가 얼마인지도 모르겠다.

코멘트

댓글 남기기

이 사이트는 Akismet을 사용하여 스팸을 줄입니다. 댓글 데이터가 어떻게 처리되는지 알아보세요.