
*이 글을 읽기전에 작성자 개인의견이 있으니, 다른 블로그와 교차로 읽는것을 권장합니다.*
1. 손글씨 데이터셋
from sklearn.datasets import load_digits
digits = load_digits()
digits.keys()
# iris datset이랑 비슷하네

data = digits['data']
data.shape
# 64개 열은 음영표시가 들어간

target = digits['target']
target.shape

target

import matplotlib.pyplot as plt
_, axes = plt.subplots(2, 5, figsize=(14, 8))
for i, ax in enumerate(axes.flatten()):
ax.imshow(data[i].reshape((8, 8)), cmap='gray') # 일렬로 되어 있는 64개의 필드를 8x8로 바꾸기
ax.set_title(target[i])

2. 스케일링(Scaling)
- 데이터(featrue 값)를 특정한 스케일로 통일하는 전처리 과정
- 다차원의 값들을 비교분석하기 쉽게 만들어주며, 자료의 오버플로우나 언더플로우를 방지하여 최적화 과정에서의 안정성 및 수렴속도를 향상
- 데이터를 모델링하기 전에 거치는 것이 좋음
2-1. 스케일링의 기법
- StandardScaler: 평균을 0, 표준편차를 1로 스케일링(변환) -> 표준화 방법

- 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(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 사이의 값으로 바꿔주는 것
- 학습 전에 Scaling을 하는 것
- 머신러닝, 딥러닝에서 Scale이 큰 Feature의 영향이 비대해지는 것을 방지
- scikit-learn에서 MinMaxScaler 사용
- 컴퓨터 계산에서 값이 커지는 것을 방지하기 위해, 속도를 높이고 메모리를 적게 사용하기 위해 사용
data[0]
# 0행

scaler = MinMaxScaler()
scaled = scaler.fit_transform(data)
scaled[0]

2-3. 표준화(Standardization)
- 값의 범위(Scale)를 평균 0, 분산 1이 되도록 바꿔주는 것
- 학습 전에 Scaling하는 것
- 머신러닝, 딥러닝에서 Scale이 큰 Feature의 영향이 비대해지는 것을 방지
- 정규분포를 표준정규분포로 변환하는 것과 같음
- scikit-learn에서 StandardScaler 사용
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=2024)
X_train.shape, y_train.shape

X_test.shape, y_train.shape

3. Support Vector Machine(SVM)

- 두 클래스로부터 최대한 멀리 떨어져 있는 결정 경계를 찾는 분류기
- 특정 조건을 만족하는 동시에 클래스를 분류하는 것을 목표로 함
- margin: 분류 문제에서 결정 경계(decision boundary)와 데이터 포인트간의 거리. 마진이 클수록 모델의 분류 신뢰성, 일반화 성능 상승
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)

print(y_test[10], y_pred[10])

plt.imshow(X_test[10].reshape(8,8), cmap='gray')
plt.show()

_, 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') # 일렬로 되어 있는 64개의 필드를 8x8로 바꾸기
ax.set_title(f'Label: {y_test[i]}, Pred: {y_pred[i]}')

'Python > 머신러닝(ML)' 카테고리의 다른 글
Python(25)- LightGBM (0) | 2024.06.19 |
---|---|
Python(24)- 앙상블 모델(Ensemble), 랜덤 포레스트(Random Forest) (0) | 2024.06.19 |
Python(22)- 로지스틱 회귀(Losistic Regression), 혼돈행렬 (0) | 2024.06.18 |
Python(21)- 의사결정나무(Decision Tree) (1) | 2024.06.18 |
Python(20)- 선형회귀(Linear Regression) (0) | 2024.06.18 |