본문 바로가기
Naver Clould with BitCamp/Aartificial Intelligence

Matplotlib: Scatter and plot

by HJ0216 2023. 1. 21.

기본 환경: IDE: VS code, Language: Python

 

Matplotlib을 활용한 데이터 시각화

 

기본적인 DNN 모델 구축 및 시각화를 통한 예측의 정확도 판별

# matplotlib_scatter_and_plot.py

import numpy as np

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

from sklearn.model_selection import train_test_split


# 1. Data
x = np.array(range(1,21))
y = np.array([1,2,4,3,5,7,9,3,8,12,13,8,14,15,9,6,17,23,21,20])

x_train, x_test, y_train, y_test = train_test_split(
    x,y,
    train_size=0.7,
    shuffle=True,
    random_state=123
)


# 2. Model Construction
model = Sequential()
model.add(Dense(64, input_dim=1))
model.add(Dense(32))
model.add(Dense(16))
model.add(Dense(1))


# 3. compile and train
model.compile(loss='mae', optimizer='adam')
model.fit(x_train, y_train, epochs=128, batch_size=4)


# 4. Evalueate and Predict
loss = model.evaluate(x_test, y_test) # 예측 전 평가

y_predict = model.predict(x) # training dataset을 predict에 사용
print("Result: ", y_predict)


import matplotlib.pyplot as plt

plt.scatter(x, y) # Scatter: 실제 x, y 데이터
plt.plot(x, y_predict, color="red") # plot: 실제 x, 예측 y 데이터
plt.show() # Scatter와 plot을 통해 시각적으로 예측을 비교, 분석할 수 있음



'''
Result

Epoch 128/128
4/4 [==============================] - 0s 5ms/step - loss: 1.9357

1/1 [==============================] - 0s 313ms/step - loss: 3.1006

Result:
[[ 1.0797057]
 [ 2.1201117]
 [ 3.160518 ]
 [ 4.2009234]
 [ 5.2413287]
 [ 6.2817335]
 [ 7.32214  ]
 [ 8.362547 ]
 [ 9.402951 ]
 [10.443358 ]
 [11.483764 ]
 [12.524168 ]
 [13.564573 ]
 [14.6049795]
 [15.645383 ]
 [16.685793 ]
 [17.7262   ]
 [18.766605 ]
 [19.807007 ]
 [20.847416 ]]
 
'''

 

plt.scatter(x, y): 파란색 점
plt.plot(x, y_predict, color="red"): 빨간색 실선

1. import matplotlib.pyplot as plt

matplotlib.pyplot library 함수를 사용하기 위해 import 후, 약칭 plt로 지정

 

2. plt.scatter(x, y)

실제 x, y 데이터를 scatter 함수에 대입하여, 산점도 반환

 

3. plt.plot(x, y_predict, color="red")

실제 x, 예측 y 데이터를 plot 함수에 대입하여, 예측 함수 반환

 

4. plt.show()

작성한 그래프 출력

 

 

 

➕ plot()

 - plot(y): plot 함수에 하나의 숫자 리스트가 대입될 경우, 해당 값을 y값으로 가정하고 x값 0, 1, 2 ...를 임의로 생성

 - plot(x,y): (x, y)에 대한 선형 함수 반환

 - plot(x1, y1, 'r--', x2, y2, 'bs'): (x1, y1)에 대한 빨간색 실선 및 (x2, y2)에 대한 파란색 네모 그래프 반환

→ 예시: (x, y) dataset과 (x, y_predict) dataset에 대한 그래프

# matplotlib_plot2.py

import numpy as np

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense

from sklearn.model_selection import train_test_split


# 1. Data
x = np.array(range(1,21))
y = np.array([1,2,4,3,5,7,9,3,8,12,13,8,14,15,9,6,17,23,21,20])

x_train, x_test, y_train, y_test = train_test_split(
    x,y,
    train_size=0.7,
    shuffle=True,
    random_state=123
)


# 2. Model Construction
model = Sequential()
model.add(Dense(64, input_dim=1))
model.add(Dense(32))
model.add(Dense(16))
model.add(Dense(1))


# 3. compile and train
model.compile(loss='mae', optimizer='adam')
model.fit(x_train, y_train, epochs=128, batch_size=4)


# 4. Evalueate and Predict
loss = model.evaluate(x_test, y_test)
y_predict = model.predict(x)


import matplotlib.pyplot as plt

plt.plot(x, y, "r--", x, y_predict, "bs")
plt.show()

 

➕ load_digits를 활용한 이미지 반환

# matshow_load_digits.py

import matplotlib.pyplot as plt

from sklearn.datasets import load_digits
# 손글씨로 쓴 숫자를 분류하는 datasets


datasets = load_digits()
# print(datasets.shape) # numpy.shape, datasets=scikit learn

plt.gray() # 이미지의 기본색조: 회색조
plt.matshow(datasets.images[0]) # 훈련용 데이터 손글씨 0
plt.matshow(datasets.images[1]) # 훈련용 데이터 손글씨 1
# plt.matshow(): array -> image로 반환
plt.show()

 

소스 코드

🔗 HJ0216/TIL

 

참고 자료

📑 01. Matplotlib 기본 사용

📑 np.unique(y[Python] Python 20일차(예제로 배우는 파이썬 데이터 시각화)

📑 [Python] 10일차 - matplotlib, histogram 등