머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses

머신러닝 데이터셋 자료 사이트

[국내]

- AI 팩토리 : http://aifactory.space

- 공공데이터포털 : https://www.data.go.kr/datasetsearch

- AI허브 : http://www.aihub.or.kr

- 데이콘 : https://dacon.io

- 보건의료빅데이터개방시스템 : https://opendata.hira.or.kr

[국외]

- 캐글 : https://www.kaggle.com/datasets

- 구글 : https://toolbox.google.com/datasetsearch

- 레딧 : https://www.reddit.com/r/datasets/

- UCI : https://archive.ics.uci.edu/ml/

<출처> www.youtube.com/watch?v=5KSkNfX1wpU

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses

300x250

반응형

1. 사이킷런(scikit-learn), 시본(seaborn) 등 파이썬 라이브러리 제공 데이터셋

2. 캐글(kaggle): https://www.kaggle.com

Kaggle: Your Machine Learning and Data Science Community

Kaggle is the world’s largest data science community with powerful tools and resources to help you achieve your data science goals.

www.kaggle.com

3. UCI 머신러닝 저장소 ( uci dataset - 구글검색) : https://archive.ics.uci.edu/ml/datasets.php

4. 공공 데이터

  (해외) WorldBank, WTO 등 국제기구

  (국내) 공공데이터 포탈, 국가통계포털 등

[관광 데이터 링크 모음]

-한국 관광 데이터 랩 https://datalab.visitkorea.or.kr/datalab/portal/main/getMainForm.do

-문화데이터광장 https://www.culture.go.kr/data/main/main.do#main

-문화 빅데이터 https://www.culture.go.kr/bigdata/user/main.do

-서울열린데이터 https://data.seoul.go.kr/

-제주데이터허브 https://www.jejudatahub.net/

-경기 공공 데이터 https://data.gg.go.kr/portal/mainPage.do

5. DACON : Data Science AI Competitions - DACON

데이터사이언티스트 AI 컴피티션

5만 AI팀이 협업하는 인공지능 플랫폼

dacon.io

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses

6. https://aihub.or.kr/

AI 허브

AI 허브는 AI 기술 및 제품·서비스 개발에 필요한 AI 인프라(AI 데이터, AI SW API, 컴퓨팅 자원)를 지원함으로써 누구나 활용하고 참여하는 AI 통합 플랫폼입니다.

aihub.or.kr

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses

7. COCO : 대규모 개체 감지, 세분화 및 캡션 데이터 세트입니다.

cocodataset.org/

COCO - Common Objects in Context

cocodataset.org

8. https://paperswithcode.com/datasets

Papers with Code - Machine Learning Datasets

6136 datasets • 69993 papers with code.

paperswithcode.com

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses

300x250

반응형

'AI > 기초' 카테고리의 다른 글

선형회귀모델로 보는 가중치(기울기,절편) 찾기 ; 경사하강법(GD)  (0)2022.04.14
선형회귀모델로 보는 가중치(기울기,절편) 찾기 ; 최소제곱법(OLS)과 손실함수(Loss function)  (0)2022.04.14
인공지능(AI)을 이해하기 위한 수학 기초: 미분  (0)2022.04.12
인공지능(AI)을 이해하기 위한 수학 기초 : 행렬, 로그, 지수, 시그마  (0)2022.04.12
기계학습(머신러닝;Machine Learning)의 분류  (0)2022.02.23

지도학습 유형 중 분류문제를 살펴보는 날이다!

붓꽃 데이터셋을 학습한 뒤 품종을 판별하는 모델을 만들어 볼 것이다.

분류 모델의 구조화, 모델 학습 및 성능 개선 프로세스를 학습하는 것을 목표로 삼는다.

1. 데이터 로딩

#라이브러리 환경: 판다스와 넘파이 사용
import pandas as pd
import numpy as np

#sklearn(사이킷런) 데이터셋에서 iris 데이터셋 로딩
from sklearn import datasets
iris=datasets.load_iris() #딕셔너리 형태

#key값 확인
iris.keys()
머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
결과값(iris의 key값) 확인

sklearn(사이킷런) 패키지는 붓꽃(iris) 데이터셋을 내장하고 있다. load_iris() 함수로 붓꽃 데이터를 불러오는데, iris 데이터셋은 딕셔너리 형태이기 때문에 key 값을 확인해줘야 했다.

키 값은 data, target, target_names, DESCR, feature_names, filename 이렇게 6가지가 있다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
iris 데이터셋 설명

데이터셋에 대한 설명은 'DESCR' 키를 사용하여 추출한다. Number of Instances에서 150개의 붓꽃 샘플의 데이터가 정리되어 있음을 알 수 있고, Attribute Information에서 4개의 피처(설명변수) sepal(꽃받침), petal(꽃잎), 가로길이, 세로길이 값이 들어있음을 알 수 있다. 또한 class에서 setosa, versicolur, virginica 3가지 범주(클래스)에 속하는 붓꽃 품종이 있음을 알 수 있다.

즉, 3가지 품종 중에서 하나를 선택하는 다중분류 문제이다.

1-1. target 속성

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
데이터셋 크기와 내용

'target' 키를 이용해 목표 변수의 데이터를 확인해봤다. 150개의 샘플 데이터에 대한 레이블 값이 1차원 배열에 들어있다. 3개의 클래스(0,1,2)가 50개씩 들어있다.

1-2. data 속성

'data' 키를 사용해서 데이터셋의 내용을 확인할 수 있다. 수집된 개별 꽃 샘플 데이터를 나타낸다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
data 키

위 코드에서는 맨 위에 7개 행을 출력한 것이다.

넘파이 배열에 [:7, :]와 같이 [행,열[ 인덱스 범위를 지정하면 된다. 

1-3. 데이터프레임 변환

위에서 확인해본 2차원 배열 iris['data']를 판다스 데이터프레임으로 변환시켜줘야 한다.

df=pd.DataFrame(iris['data'], columns=iris['feature_names'])
print("데이터프레임의 형태", df.shape)
df.head()
머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
결과창

위의 코드를 입력해, 열 이름은 feature_names 데이터를 지정해준다. feature_names에 들어있는 문자열들이 4개의 열의 이름이 된다.

df.columns=['sepal_length', 'sepal_width', 'petal_length', 'petal_width']
df.head(2)
머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
결과 창

데이터 프레임의 열 이름을 간결하게 바꿔주었다. head함수에 숫자를 입력하면, 숫자만큼의 행을 추출할 수 있다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
타깃 레이블 추가

target 열을 새로 만들어 추가해봤다(맨 오른쪽 열에). 

2. 데이터 탐색

2-1. 데이터셋의 기본정보

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
info 메소드

info()는 데이터프레임의 기본 정보를 보여준다.현재 모든 열에 150개 유효값이 있고, 64비트 실수형과 정수형으로 구성되어 있음을 알 수 있다.

※유효값(non-null): 결측값이 아닌 

2-2. 통계 정보 요약

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
describe()

describe()은 150개 샘플의 평균값, 표준편차, 최소값, 최대값 등 통계 정보를 요약해준다. 

2-3. 결측값 확인

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
isnull

데이터프레임에 isnull()을 적용하면, 각 원소가 결측값(null)인지 아닌지 체크한다. 결측값이면 True, 정상데이터면 False를 반환한다. 그리고 그 상태에서 sum()을 적용해주면, 각 열의 결측값의 개수를 계산해준다.

현재 우리는 모두 유효값이었기 때문에, 결측값이 없음을 알 수 있다. 

2-4. 중복 데이터 확인

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
 duplicated

데이터프레임에 duplicated()를 적용하면 동일한 샘플이 중복되어 존재하는지 체크한다. 중복되면 True, 아니면 False를 반환한다.

우리는 현재 1개의 행이 중복된 상태임을 알 수 있다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
실제 중복된 데이터 확인

실제 어느 행의 데이터가 중복인지 확인해볼 수 있다. loc 인덱서의 행 위치에 중복 데이터인지 여부를 표시하는 bool 값을 입력한다. 중복인 행을 True이므로 출력된다.

우리는 현재 142번 데이터가 중복된다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
어떤 데이터와 중복인지 확인

duplicated() 결과를 갖고 어떤 데이터행끼리 중복되는지 확인할 수 있다.

우리는 현재 142번과 101번의 데이터가 중복된다!

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
중복데이터 제거

중복데이터를 제거해보자!! drop_duplibcates()를 이용하면, 중복으로 나타났던 142번 행이 제거됨을 확인할 수 있다.

2-5. 상관 관계 분석

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
corr()과 상관 계수 행렬

corr()은 변수 간의 상관 계수 행렬을 출력한다. (사실 무슨 말인지 모르겠다.)

2-6. 데이터 시각화

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
matplotlib, seaborn

시각화 패키지인 맷플롯립(matplolib)과 시본(seaborn)을 as를 사용해 불러온다. set()을 이용해 글씨 크기를 1.2로 설정한다. (크기 배율을 1.2배로)

#상관 계수 히트맵
sns.heatmap(data=df.corr(), square=True, annot=True, cbar=True)
plt.show()
머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
결과창

시본의 heatmap()을 이용해 상관 계수 행렬을 히트맵으로 나타냈다. 각 변수 간의 상관계수를 다른 색으로 표현하는데, annnot 옵션을 사용해 상관 계수 숫자까지 표시할지 말지 정한다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
 target

value_counts()를 적용하면, 데이터 종류별 샘플 개수를 출력한다. 현재 target 열에는 각 클래스(3개)별로 50개씩 데이터가 저장되어 있으며, 2번에는 49개가 저장되어 있다. 아까 중복된 데이터를 삭제했기 때문에 50개에서 49개로 변경된 것 같다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
hist 함수

맷플롯립의 hist()를 이용해 sepal_length열의 데이터를 히스토그램으로 그려봤다. data 옵션에 그래프를 그릴 데이터프레임을 지정하고, x옵션에 피처(열 이름)을 입력한다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
막대그래프

시본 displot()을 이용해 sepal_width 데이터의 분포를 히스토그램으로 표현했다. data 옵션에 그래프를 그릴 데이터프레임을 지정하고, x옵션에 피처(열 이름)을 입력한다. kind 옵션은 그래프 종류를 지정하는데, 히스토그램을 나타내는 hist 값을 입력했다. 

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
kde 그래프

KDE 밀도함수 그래프도 그릴 수 있다. petal_length 데이터의 분포를 그려봤는데, kind 옵션에 'kde'라고만 넣어주면 된다.

두 개의 봉우리 형태로 분포된 것으로 보아, 서로 다른 이질적인 데이터가 섞여있다고 추정할 수 있다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
다수의 kde 그래프

품종별 sepal_length 데이터의 분포를 그릴 수 있다. displot에 hue 옵션을 적용해주면 된다.

위의 결과를 통해 Setosa 품종(클래스 0)의 꽃받침 길이가 짧은 편임을 알 수 있다.

sns.pairplot(df, hue='Target', height=2.5, diag_kind='kde')
plt.show()
머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
결과창

시본 pairplot()을 이용하면 서로 다른 피처 간 관계를 나타내는 그래프를 한번에 나타낼 수 있다. hue 옵션에 Target 열을 지정해 목표 클래스별로 구분하여 표시한다. 또한 kde를 지정해 대각 방향에는 밀도함수로 나타낸다. (hist로 설정하면 히스토그램으로 표시)

※이전에 사용되던 size 옵션은 height 옵션으로, 명칭이 변경되었다.

3. Train-Test 데이터셋 분할

모델학습에 사용한 훈련(train) 데이터와 모델성능을 평가하는데 사용할 테스트(Test) 데이터를 분할한다. 사이킷런의 train_test_split()을 사용하면 편리하게 나눌 수 있다.

from sklearn.model_selection import train_test_split

x_data=df.loc[:, 'sepal_length':'petal_width']
y_data=df.loc[:, 'Target']

x_train, x_test, y_train, y_test=train_test_split(x_data,
                                                  y_data,
                                                  test_size=0.2,   #전체 중 20%를 테스트용으로 분할
                                                                   #나머지 80%는 훈련용
                                                  shuffle=True,    #무작위로 섞어서 추출
                                                  random_state=20) #무작위 추출 시 일정한 기준으로 분할
                                                                   #즉, 코드를 다시 실행해도 같은 결과를 얻음
print(x_train.shape, y_train.shape)
print(x_test.shape, y_test.shape)

4. 분류 알고리즘-KNN

KNN(K-Nearest-Neighbors) 분류 알고리즘은 예측하려는 데이터 x가 주어지면, 기존 데이터 중 속성이 비슷한 k개의 이웃을 먼저 찾는 알고리즘이다. 즉, x를 둘러싼 k개의 가장 가까운 이웃을 찾고, 이웃 데이터가 가장 많이 속해있는 목표 클래스르 예측값으로 결정하는 것이다.

k값에 따라 모델의 예측력이 달라지므로 적합한 k값을 설정해야 한다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
knn 모델 정의 pandas as pd

위는 k=7로 하는 KNN 모델을 정의한 예시로, fit()에 훈련데이터를 입력하여 모델학습을 시킨 것이다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
예측

x_test를 predict()에 입력해 예측값을 산출해보았다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
 모델의 성능 평가

모델의 성능을 평가하기 위해 사이킷런 metrics 모듈에서 accuracy_score()를 불러왔다. x_test의 정답 레이블 y_test를 예측값 y_knn_pred와 함께 입력해서 정확도를 산출했다. k=7일 때 KNN모델은 96.67%의 정확도를 보인다.

5. 분류 알고리즘-SVM

SVM(Support Vector Machine)은 데이터셋의 각 피처(열) 벡터들이 고유의 축을 갖는 벡터 공간을 이룬다고 가정한다. 모든 데이터를 벡터 공간 내의 좌표에 점으로 표시하고, 각 데이터가 속하는 목표 클래스별로 군집을 이룬다고 생각한다. 

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
 svc 인스턴스 객체 생성

SVM 알고리즘이 구현된 사이킷런 svm 모듈에서 분류모델인 svc 인스턴스 객체를 생성하고 모델을 학습시킨다. 커널(kernel)은 데이터를 벡터 공간으로 매핑하는 함수를 말하며, 'rbf'는 Radial Basis Foundation을 뜻한다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
예측값 및 정확도 산출

predict()로 예측값을 산출한 뒤, acccuracy_score()로 정확도를 산출해봤다. 100%의 정확도를 보이는 것으로 나타난다. 올...

6. 분류 알고리즘-로지스틱 회귀

로지스틱 회귀(Logistic Regression)는 분류 알고리즘이다. 시그모이드 함수의 출력값(0~1 사이)을 각 분류 클래스에 속하게 될 확률값으로 사용한다. 1에 가까우면 해당클래스로 분류하고, 0에 가까우면 아니라고 분류한다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
로지스틱 인스턴스 객체 생성

사이킷런 linear_model 모듈에서 LogisticRegression 클래스를 불러왔다. 모델 인스턴스 객체를 생성하고, fit 메소드에 훈련데이터를 입력하면 학습을 진행한다. 

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
예측값 및 정확도 산출

예측값과 정확도를 산출해보면, 100%의 정확도를 보인다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
이..이게뭐노

predict_proba 메소드를 사용하면 각 클래스에 속할 확률값을 예측할 수 있다. 위의 결과를 보면 3개의 열과 30개의 행으로 구성된 넘파이 배열이 반환된다. 첫번째 열은 클래스 0의 확률, ..., 세번째 열은 클래스 2의 예측 확률이다. 

근데 왜 양수가 아닌 음수로 뜨는지 모르겠다,,,,후,,,실패!^^

7. 분류 알고리즘-의사결정나무

의사결정나무(Decision Tree) 모델은 트리 알고리즘을 사용한다. 트리의 각 분기점(node)에는 데이터셋의 피처를 하나씩 위치시킨다. 각 분기점에서 해당 피처에 관한 임의의 조건식을 갖고 계속 2개 이상 줄기로 가지를 나누면서 데이터를 구분한다. 이때, 각 분기점에서 분류가 가장 잘 되는 최적의 기준을 찾는 과정이 중요하다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
 의사결정나무 객체 생성

사이킷런 tree 모듈에서 DecisionTreeClassifier을 가져와 트리의 최대 깊이(max_depth)를 3으로 설정한다. max_depth를 설정하는 이유는 모델이 지나치게 복잡해지면 훈련데이터에 과대적합되기 때문이다. fit()에 훈련 데이터를 입력해 모델을 학습시킨다.

머신러닝 분류 데이터셋 - meosinleoning bunlyu deiteoses
아니 이게 자꾸 왜이러냐고

예측값과 정확도를 살펴봤다. 책에서는 93.33%라는데 나는 100%의 정확도가 나왔다. 책이랑 똑같이 했는데 왜 다르냐고.

8. 앙상블 모델-보팅

9. 앙상블 모델-배깅

10. 앙상블 모델-부스팅

11. 교차검증-Hold-out

12. 교차검증-K-fold