본문 바로가기

AI & 머신러닝 coding skill56

머신러닝 분류 - 정확도(accuracy), 정밀도(precision), 재현율(recall) 정확도(accuracy), 정밀도(precision), 재현율(recall) 이번 실습에서는 간단한 분류 결과 확인 및 비교를 통해 분류 알고리즘 평가 지표인 정확도, 정밀도, 재현율 결과를 직접 계산해보겠습니다. ​ 실습 10명의 친구들이 모여서 ‘마피아 게임’을 진행하려고 합니다. 게임의 룰은 마피아의 수가 시민 수보다 적어야 하며, 숫자는 정해지지 않았기 때문에 마피아의 수를 생각하고 정확히 마피아를 찾아서 없애야 게임에서 승리할 수 있습니다. 추리를 통해 예측된 결과와 실제 값을 비교하여 혼동행렬을 출력해보고, 결과를 분석해 보겠습니다. 실행 버튼을 클릭하여 마피아(mafia)와 시민(not mafia)으로 분류된 혼동 행렬을 확인합니다. 실행 결과값을 토대로 마피아를 제대로 분석했는지에 대한 a.. 2022. 5. 24.
머신러닝 분류 - 혼동 행렬(Confusion matrix) 혼동 행렬(Confusion matrix) 혼동 행렬(Confusion matrix)은 분류 문제에서 모델을 학습시킨 뒤, 모델에서 데이터의 X값을 집어넣어 얻은 예상되는 y값과, 실제 데이터의 y값을 비교하여 정확히 분류 되었는지 확인하는 메트릭(metric)이라고 할 수 있습니다. 위 표가 바로 혼동 행렬이며, 각 표에 속한 값은 다음을 의미합니다. True Positive (TP) : 실제 값은 Positive, 예측된 값도 Positive. False Positive (FP) : 실제 값은 Negative, 예측된 값은 Positive. False Negative (FN) : 실제 값은 Positive, 예측된 값은 Negative. True Negative (TN) : 실제 값은 Negative.. 2022. 5. 24.
머신러닝 분류 - 사이킷런을 활용한 나이브 베이즈 분류 사이킷런을 활용한 나이브 베이즈 분류 이전 실습에서는 메일 내에서 스팸 및 정상 메일을 분류할 때, X = ‘확인’ 키워드 유무(O or X) Y = 메일 결과 (스팸 or 정상) 로, 입력값 X의 개수가 1개였습니다. 하지만, 만약 이메일에서 ‘확인’ 키워드 말고도 ‘.exe 첨부파일’을 보냈는지, 안보냈는지 혹은 메일 제목에 대괄호가 쓰였는지/안쓰였는지 등의 다양한 입력값이 추가되어 스팸메일을 분류한다면, 문제가 좀 더 복잡해 질 것 같습니다. 이러한 복잡한 문제 해결을 위하여 사이킷런에는 나이브 베이즈 분류 모델을 구현하여, 모듈 호출을 통해 간단히 나이브 베이즈 분류를 사용할 수 있도록 하였습니다. 이번 실습에서는 Wine 데이터를 활용하여 나이브 베이즈 분류 방법 중 하나인 가우시안 나이브 베이.. 2022. 5. 24.
머신러닝 분류 - 나이브 베이즈 분류 베이즈 정리로 나이브 베이즈 분류 구현하기 나이브 베이즈 분류는 데이터의 확률적 속성을 가지고 클래스를 판단하는, 꽤 높은 성능을 가지는 머신러닝 알고리즘입니다. 이를 이해하기 위해서 Bayes’ Theorem에 친숙해 질 필요가 있습니다. 간단한 나이브 베이즈 분류 구현을 통해 베이즈 정리에 대해 이해해보도록 하겠습니다. data set 내에서 X와 Y의 빈도수를 활용하여 연산에 필요한 각각의 확률값을 계산 할 수 있습니다. 엘리스의 이메일을 한 번 들여다 보면서 Bayes’ theorem을 이해해 볼까요? 엘리스의 이메일은 다음과 같은 텍스트 목록을 가지고 있습니다. 타입텍스트 Spam “(광고) XXX 지금 확인 해보세요.” 첨부파일 : exe Ham “[긴급]엘리스님, 확인 부탁드립니다.” 첨부파.. 2022. 5. 24.
머신러닝 분류 - SVM(Support Vector Machine) SVM(Support Vector Machine) 서포트 벡터 머신은 높은 성능을 보여주는 대표적인 분류 알고리즘입니다. 특히 이진 분류를 위해 주로 사용되는 알고리즘으로, 각 클래스의 가장 외곽의 데이터들 즉, 서포트 벡터들이 가장 멀리 떨어지도록 합니다. 이번 실습에서는 0과 1로 분류되어 있는 데이터 셋에서, SVM을 사용하여 데이터가 올바르게 분류되는지 확인해보겠습니다. SVM을 위한 사이킷런 함수/라이브러리 from sklearn.svm import SVC : SVM 모델을 불러옵니다. SVC(): SVM 모델을 정의합니다. [Model].fit(x, y): (x, y) 데이터셋에 대해서 모델을 학습시킵니다. [Model].predict(x): x 데이터를 바탕으로 예측되는 값을 출력합니다. T.. 2022. 5. 24.
머신러닝 Decision tree - 앙상블(Ensemble) 기법 - Bagging 앙상블(Ensemble) 기법 - Bagging 이번 실습에서는 Bagging을 사용한 분류기(BaggingClassifier)를 구현하는 방법을 알아보도록 하겠습니다. 배깅 (Bagging) 배깅(Bagging)은 여러 분류 모델을 사용했던 Voting과 달리 동일한 분류 모델만을 사용해야 합니다. 사이킷런에 구현되어 있는 BaggingClassifier를 사용해 동일한 유방암 데이터 셋을 학습, 예측해보고 단일 의사결정 나무 모델과의 결과를 비교해보도록 하겠습니다. BaggingClassifier를 위한 사이킷런 함수/라이브러리 from sklearn.ensemble import BaggingClassifier : 사이킷런에 구현되어 있는 BaggingClassifier를 불러옵니다. BaggingC.. 2022. 5. 24.
머신러닝 Decision tree - 앙상블(Ensemble) 기법 - Voting 앙상블(Ensemble) 기법 - Voting 이번 실습에서는 다양한 앙상블 기법 중 Voting을 사용한 분류기(VotingClassifier)를 구현하는 방법을 알아보도록 하겠습니다. Voting Voting은 의미 그대로 투표를 통해 값을 결정하는 것입니다. Voting의 종류에는 Hard voting과 Soft voting이 있습니다. Hard Voting : 다수의 분류기가 예측한 값을 최종 값으로 선택 Soft Voting : 각 레이블 별로 예측 확률을 낸 후 평균을 내어 최종 값으로 선택 일반적으로 Soft voting이 성능이 더 좋아 더 많이 사용됩니다. VotingClassifier를 위한 사이킷런 함수/라이브러리 from sklearn.ensemble import VotingClas.. 2022. 5. 24.
머신러닝 의사결정 나무(DecisionTree Classifier) - 분류 의사결정 나무(DecisionTree Classifier) - 분류 이번 실습에서는 분류 문제 해결을 위해 Iris 데이터를 사용합니다. Iris 데이터는 꽃받침 길이, 꽃받침 넓이, 꽃잎 길이, 꽃잎 넓이 네 가지 변수와 세 종류의 붓꽃 클래스로 구성되어 있습니다. iris 데이터에 대해 분류 의사결정 나무 모델을 사용하여 예측 문제를 수행해보도록 하겠습니다. 분류를 위한 의사결정 나무 예시 사진 분류 의사결정 나무를 위한 사이킷런 함수/라이브러리 from sklearn.tree import DecisionTreeClassifier : 사이킷런에 구현되어 있는 분류 의사결정 나무 모델을 불러옵니다. DecisionTreeClassifier(): 분류를 위한 의사결정 나무 모델을 정의합니다. [Model.. 2022. 5. 24.
머신러닝 의사결정 나무(DecisionTree Regressor) - 회귀 의사결정 나무(DecisionTree Regressor) - 회귀 회귀를 위한 의사결정 나무 모델을 사용해보고, 결과를 확인해보겠습니다. 특히 max_depth라고 하는, 나무의 최대 깊이를 다양하게 정의하여 모델의 학습 결과를 그래프를 통해 이해해보겠습니다. 회귀 의사결정 나무를 위한 사이킷런 함수/라이브러리 from sklearn.tree import DecisionTreeRegressor : 사이킷런에 구현되어 있는 회귀 의사결정 나무 모델을 불러옵니다. DecisionTreeRegressor(max_depth) max_depth : 트리의 최대 깊이 [Model].fit(X, y): (X, y) 데이터셋에 대해서 모델을 학습시킵니다. [Model].predict(X): X 데이터를 바탕으로 예측되.. 2022. 5. 24.
머신러닝 - 이진트리 분류기 만들기 간단한 이진트리 분류기 만들기 이번 실습에서는 연예인들의 직업, 성별, 키 데이터를 기반으로 간단한 이진트리 분류기를 구현한 후, 이를 통해 그들의 이름을 구분해보겠습니다. job, height, sex : 분류를 위한 변수 name : 분류 클래스 위의 그림과 같은 트리구조를 만들어 데이터를 분류해보겠습니다. import numpy as np import pandas as pd # 직업, 키, 성별로 이름을 구분하는 간단한 이진트리 분류기를 만들어보겠습니다. name = ['하하', '김범수', '다현', '아이유', '최민식', '김혜수'] job = ['가수', '가수' , '가수', '가수' , '배우' , '배우'] height = [171, 182, 158, 160, 177, 170] sex .. 2022. 5. 24.
머신러닝 - t-SNE t-SNE t-SNE 알고리즘은 데이터 시각화를 위해 주로 활용되는 차원 축소 알고리즘입니다. 데이터 간의 거리에 상관없이 함축적으로 표현되는 PCA와는 달리 t-SNE는 차원 축소 이후에도 가까운 데이터는 가깝게, 멀리 있는 데이터는 멀게 표현할 수 있습니다. 따라서 대용량 데이터의 시각화 즉, 구별 가능한 시각화를 위해 활용할 수 있습니다. 이번 실습에서는 주성분 분석(PCA)에서 사용한 와인 데이터를 활용하여 t-SNE 알고리즘을 사용하는 방법을 학습해보도록 하겠습니다. t-SNE를 위한 사이킷런 함수/라이브러리 from sklearn.manifold import TSNE : 사이킷런에 구현되어 있는 tsne 모델을 불러옵니다. TSNE(n_components): n_components 개수로 데이.. 2022. 5. 23.
머신러닝 - 주성분 분석(PCA) 주성분 분석(PCA) PCA를 사용하면 가장 덜 중요한 축들은 제거되고, 가장 중요한 상위 축만 남겨집니다. 이렇게 데이터 내에서 영향을 덜 주는 변수들이 사라지면, 점들 간에 가장 중요한 관계를 맺는 차원들만을 남길 수 있습니다. 예를 들어, 변수를 반으로 줄였을 때 대부분의 점들이 잘 보존된다면, 적은 정보로 값을 그대로 표현할 수 있어 데이터를 사용하기에 훨씬 효율적일 것입니다. 이번 실습에서는 2차원으로 고정한 wine data를 주성분이 있는 PCA를 사용하여 1차원으로 축소할 때 결과를 확인해보도록 하겠습니다. PCA를 위한 사이킷런 함수/라이브러리 from sklearn.decomposition import PCA : 사이킷런에 구현되어 있는 주성분 분석(PCA) 모델을 불러옵니다. PCA(.. 2022. 5. 23.