1. 손글씨 데이터셋
- scikit-learn 라이브러리에서 손글씨 숫자 데이터셋을 불러오기
from sklearn.datasets import load_digits
- digits 변수에 load_digits() 함수의 결과를 할당
digits = load_digits()
digits
- digits 데이터셋에서 사용 가능한 키(속성)들을 확인
data.shape: data 배열의 형태(shape)를 확인
digits.keys()
data = digits['data']
data.shape
- digits 데이터셋에서 'target' 키에 해당하는 값을 가져와 target 변수에 할당
* 'target'은 이미지에 대한 실제 숫자 값(레이블)을 포함하는 배열
target = digits['target']
target.shape
target
- 2x5 격자 모양의 서브플롯을 생성
각 숫자 이미지를 하나의 서브플롯에 표시
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])
# ax.imshow(data[i].reshape((8, 8)) : data[i]를 8x8 행렬로 변형
# cmap='gray' : 흑백 이미지로 표시
# cmap='gray' : 매개변수는 흑백 색상 맵을 사용하도록 지정
# ax.set_title(target[i]) :각 이미지의 제목을 target[i]로 설정
- 2x5 격자 모양의 서브플롯을 생성, 생성된 그림과 서브플롯들을 출력하는 코드
fig,axes = plt.subplots (2,5,figsize=(14,8))
print(fig)
print(axes)
2. 스케일링(Scaling)
* 데이터를 특정한 스케일로 통일하는 것
* 다차원의 값들을 비교 분석하기 쉽게 만들어주며,
자료의 오버플로우나 언더플로우를 방지하여 최적화 과정에서의 안정성 및 수렴 속도를 향상
* 데이터를 모델링하기 전에 거치는 것이 좋음
1. 스케일링의 종류 |
* StandardScaler : 평균과 표준편차를 사용 * MinMaxScaler : 최대, 최솟값이 각각 1과 0 이 되도록 스케일링 * RobustScaler : 중앙값과 IQR사용(아웃라이어의 영향을 최소화) |
- 영화의 평점을 나타내는 딕셔너리
딕셔너리 키: 'naver', 'netflix'(리스트로 표현)
import pandas as pd
movie = {
'naver': [2, 4, 6, 8, 10],
'netflix': [1, 2, 3, 4, 5]
}
movie = pd.DataFrame(movie)
movie
- 영화 평점 데이터를 Min-Max 스케일링을 사용하여 정규화
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. 정규화(Normalization) |
* 값의 범위(Scale)을 0~1사이의 값으로 바꿔주는 것 * 학습 전에 Scaling을 하는 것 * 머신러닝, 딥러닝에서 Scale이 큰 Feature의 영향이 비대해지는 것을 방지 * scikit-learn에서 MinMaxScaler 사용 |
- digits 데이터셋에서 첫 번째 이미지 데이터 출력
data[0]
|
- 최소-최대 스케일링(Min-Max Scaling)하여 정규화
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
scaled= scaler.fit_transform(data)
scaled[0]
|
|
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_test.shape
3. Support Vector Machine(SVM)
* 두 클래스로부터 최대한 멀리 떨어져 있는 결정 경계를 찾는 분류기
* 특정 조건을 만족하는 동시에 클래스를 분류하는 것을 목표로 함
* 머신러닝 중 최대성능을 내는 모델
- import
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[0],y_pred[0])
|
|
- 테스트 데이터의 첫 번째 샘플을 이미지로 시각화하여 출력
plt.imshow(X_test[0].reshape(8,8), cmap='gray')
plt.show()
- 테스트 데이터의 처음부터 10개 샘플을 그래프로 나타내기
import matplotlib.pyplot as plt
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]}')
|
|
'AI > 머신러닝' 카테고리의 다른 글
10. lightGBM | Credit (0) | 2024.06.13 |
---|---|
09. 랜덤 포레스트 (Random Forest) | Hotel (0) | 2024.06.12 |
07. 로지스틱 회귀(Logistic Regression) | 인사자료 (0) | 2024.06.12 |
06. 의사결정 나무(Decision Tree) | 자전거 (0) | 2024.06.11 |
05. 선형회귀(Linear Regression) | Rent (0) | 2024.06.11 |