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..)에서 끊어져 애는 끝까지 아래로 간다고 생각하나 보다.
특정 부분을 보고 특징을 뽑아내야 하는데, 그냥 인공지능 하나 만들어서 하는게 낫다. 에러, 정확도가 얼마인지도 모르겠다.