from sklearn.datasets import load_digits
digits = load_digits()
digits.keys()
# 출력값 => dict_keys(['data', 'target', 'frame', 'feature_names', 'target_names', 'images', 'DESCR'])
data = digits['data']
data.shape
# 출력값 => (1797, 64)
target = digits['target']
target.shape
# 출력값 => (1797,)
target
# 출력값 => array([0, 1, 2, ..., 8, 9, 8])
import matplotlib.pyplot as plt
fig, axes = plt.subplots(2, 5, figsize=(14, 8))
for i, ax in enumerate(axes.flatten()):
ax.imshow(data[i].reshape((8,8)), cmap='gray')
ax.set_title(target[i])
target.shape
# 출력값 => (1797,)
target.shape[0]
# 출력값 => 359
target.shape[0] // 5 # 몫
# 출력값 => 359
fig, axes = plt.subplots(target.shape[0] // 5, 5, figsize=(14, 8))
for i, ax in enumerate(axes.flatten()):
ax.imshow(data[i].reshape((8,8)), cmap='gray')
ax.set_title(target[i])
# 정답이 너무 많아서 이렇게 나오고 있는것.
2. 스케일링(Scaling)
- 데이터를 특정한 스케일로 통일하는 것
- 다차원의 값들을 비교 분석하기 쉽게 만들어주며, 자료의 오버플로우나 언더플로우를 방지하여 최적화 과정에서의 안정성 및 수렴 속도를 향상
- 데이터를 모델링하기 전에 거치는 것이 좋음(int, float)
2-1. 스케일링의 종류
- StandardScaler : 평균과 표준편차를 사용
- MinMaxScaler : 최대, 최소값이 각각 1과 0이 되도록 스케일링
- RobustScaler : 중앙값과 IQR사용(아웃라이어의 영향을 최소화)
import pandas as pd
movie = {'naver':[2, 4, 6, 8, 10], 'netflix':[1, 2, 3, 4, 5]}
movie = pd.DataFrame(data=movie)
movie
from sklearn.preprocessing import StandardScaler, MinMaxScaler, RobustScaler
min_max_scaler = MinMaxScaler()
min_max_scaler = min_max_scaler.fit_transform(movie)
min_max_scaler
pd.DataFrame(min_max_scaler, columns=['naver', 'netflix'])
2-2. 정규화(Normalization)
- 값의 범위(scale)을 0 ~ 1 사이의 값으로 바꿔주는 것
- 학습 전에 scalling 하는 것
- 머신러닝에서 scale이 큰 feature의 영향이 비대해지는 것을 방지
- scikit-learn에서 MinMaxScaler 사용
data[0]
scaler = MinMaxScaler()
scaled = scaler.fit_transform(data)
scaled[0]
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(scaled, target, test_size=0.2, random_state=2023)
print(X_train.shape, y_train.shape)
print(X_test.shape, y_test.shape)
# 결과값 =>
# (1437, 64) (1437,)
# (360, 64) (360,)
2-3. 표준화(Standardization)
- 값의 범위(scale)를 평균0, 분산1이 되도록 바궈주는 것
- 학습 전에 scalling하는 것
- 머신러닝에서 scale이 큰 feature의 영향이 비대해지는 것을 방지
- 정규분포를 표준정규분포로 변환하는 것과 같음
- scikit-learn에서 StandardScaler 사용
3. Suppert Vector Machine(SVM)
- 두 클래스로부터 최대한 멀리 떨어져 있느 결정 경계를 찾는 분류기로 특정 조건을 만족하는 동시에 클래스를 분류하는 것을 목표로 함.
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
model = SVC()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
accuracy_score(y_test, y_pred)
# 결과값 => 0.9916666666666667
print(y_test[10], y_pred[10])
# 결과값 => 3 3
plt.imshow(X_test[10].reshape(8, 8))
plt.show()
fig, axes = plt.subplots(2, 5, figsize=(14, 8))
for i, ax in enumerate(axes.flatten()):
ax.imshow(X_test[i].reshape((8,8)), cmap='gray')
ax.set_title(f'Label:{y_test[i]}, Pred:{y_pred[i]}')
'Study > 머신러닝과 딥러닝' 카테고리의 다른 글
[머신러닝과 딥러닝] 10. lightGBM (0) | 2024.01.05 |
---|---|
[머신러닝과 딥러닝] 9. 랜덤 포레스트 (0) | 2024.01.03 |
[머신러닝과 딥러닝] 7. 로지스틱 회귀 (0) | 2024.01.02 |
[머신러닝과 딥러닝] 6. 의사 결정 나무 (0) | 2023.12.29 |
[머신러닝과 딥러닝] 5. 선형 회귀 (0) | 2023.12.28 |