머신 러닝 전반적인 소개¶
필수 라이브러리와 도구들¶
NumPy¶
In [1]:
import numpy as np
x=np.array([[1,2,3],[4,5,6]])
print(x)
SciPy¶
In [2]:
from scipy import sparse
# 대각선 원소는 1이고 나머지는 0인 2차원 Numpy 배여을 만든다.
eye=np.eye(4)
print(eye)
In [3]:
# Numpy 배열을 CSR 포맷의 SciPy 희박 행렬로 변환합니다.
# 0이 아닌 원소만 저장됩니다.
sparse_matrix=sparse.csr_matrix(eye)
print("SciPy의 CSR 행렬:\n",sparse_matrix)
- CSR은 희소행렬을 저장하는 4가지 자료구조중 하나.
- CSR: 가로의 순서대로 재정렬하는 방법으로 행에 관여하여 정리 압축
In [4]:
# COO포맷을 이용한 암서와 동일한 희소 행렬을 만드는 예제
data= np.ones(4)
row_indices=np.arange(4)
col_indices=np.arange(4)
eye_coo=sparse.coo_matrix((data,(row_indices,col_indices)))
print(eye_coo)
- COO:(행, 열, 값) 튜플 목록 저장
붓꽃의 품종 분류¶
In [5]:
from sklearn.datasets import load_iris
# iris 데이터를 가지고 온다.
iris_dataset=load_iris()
In [6]:
print('iris_dataset의 키:',iris_dataset.keys(),sep='\n')
In [7]:
print(iris_dataset['DESCR'][:193]+'\n...')
- 데이터셋에 대한 간략한 설명
In [8]:
print('타깃의 이름:\n',iris_dataset['target_names'])
In [9]:
print('특성의 이름:\n',iris_dataset['feature_names'])
In [10]:
print('data의 타입:\n',type(iris_dataset['data']))
In [11]:
print('data의 타입:\n',iris_dataset['data'].shape)
데이터 나누기¶
In [12]:
from sklearn.model_selection import train_test_split
# train, test 데이터를 나눈다.
X_train,X_test,y_train,y_test=train_test_split(
iris_dataset['data'],iris_dataset['target'],random_state=0)
print('X_train 크기:',X_train.shape)
print('y_train 크기:',y_train.shape)
print('X_test 크기:',X_test.shape)
print('y_test 크기:',y_test.shape)
- train set은 전체의 75%, test set은 전체의 25%로 나눈다.
데이터 살펴보기¶
In [13]:
import pandas as pd
import mglearn
# X_train 데이터를 사용해서 데이터프레임을 만듭니다.
# 열의 이름은 iris_dataset.feature_names에 있는 문자열을 사용합니다.
iris_dataframe= pd.DataFrame(X_train,columns=iris_dataset.feature_names)
# 데이터프레임을 사용해 y_train에 따라 색으로 구분된 산점도 행렬을 만듭니다.
pd.plotting.scatter_matrix(iris_dataframe,c=y_train,figsize=(15,15),marker='o',
hist_kwds={'bins':20},s=60,alpha=8,cmap=mglearn.cm3)
Out[13]:
- 그래프를 통해서 비정상적인 값이나 특이한 값들을 찾을 수도 있다.
- 데이터 탐색을 하면서 이상한 값을 제거하는 작업을 해준다.
첫 번째 머신러닝 모델: k-최근접 이웃 알고리즘¶
In [14]:
from sklearn.neighbors import KNeighborsClassifier
knn=KNeighborsClassifier(n_neighbors=1)
knn.fit(X_train,y_train)
Out[14]:
- KNN알고리즘에서 k는 가장 가까운 'k개'의 이웃을 찾는다.
- 그런 다음 이 이웃들의 클래스 중 빈도가 가장 높은 클래스를 예측값으로 사용한다.
예측하기¶
In [15]:
# 새로운 데이터
X_new=np.array([[5,2.9,1,0.2]])
print('X_new.shape:',X_new.shape)
In [16]:
prediction=knn.predict(X_new)
print('예측:',prediction)
print('예측한 타깃의 이름:',iris_dataset['target_names'][prediction])
모델 평가하기¶
In [17]:
y_pred=knn.predict(X_test)
print('테스트 세트에 대한 예측값:\n',y_pred)
# 테스트 세트의 정확도 계산법1
print('테스트 세트의 정확도:{:.2f}'.format(np.mean(y_pred==y_test)))
# 테스트 세트의 정확도 계산법2
print('테스트 세트의 정확도:{:.2f}'.format(knn.score(X_test,y_test)))
- 정확도 0.97은 모델 테스트 세트에 포함된 붓꽃 중 97%의 품종을 정확히 맞혔다는 뜻.
- 정확도 계산하는 score 메서드로 모델을 평가.
참고자료
- 파이선 라이브러리를 활용한 머신러닝/안드레아스 뮐러,세라가이도 지음/ 박해선 옮김/ 한빛미디어
'데이터 분석 > Machine Learning' 카테고리의 다른 글
지도학습_K최근접 이웃 (0) | 2020.12.17 |
---|