ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3_인공지능개론
    학교/인공지능 2024. 4. 21. 10:46

    * 샘플로 구성되는 데이터셋

    - 기계 학습이 사용하는 데이터는 여러 개의 샘플을 담고 있어서 데이터셋(data set)이라 부르기도 함

     

    * 특징으로 구성되는 특징 벡터 (feature vector)

     

     

    * DESCR은 iris 데이터셋에 대한 설명문 제공

    - 특징벡터에 있는 특징별로 간단한 통계량을 보여주고 데이터를 수집한 시기와 사람 등 정보 제공

     

     

     

     

     

     

     

     

     

     

    * 데이터 로딩 후 내용 출력

     

     

     

     

     

     

     

     

     

     

     

     

     

    * iris 내용 확인

     

     

     

     

     

     

     

     

     

     

     

     

    * 샘플을 특징 벡터와 레이블로 표현

    - 특징 벡터는 x로 표기

    - d 는 특징의 개수로서 특징 벡터의 '차원'이라 부름

    - 오른쪽 표에서 xd

    - 즉, 하나의 샘플은 d개의 특징을 갖는 '특징 벡터'로 표현

    - 여러 개의 샘플: X1, X2, ..., X150

    - 즉, 샘플 1개는 d개의 차원으로 구성

    - 레이블(정답)의 부류의 개수가 C라고 하면, 

    0, 1, 2, ..., c-1의 값 또는 1, 2, ... c-1, c 의 값

    또는 원핫 코드 (one-hot code)

    - 원핫 코드는 한 요소만 1인 이진열

    - ex) Setosa는 (1, 0, 0), Versicolor는 (0, 1, 0), Virginica는 (0, 0, 1)로 표현

     

     

     

     

     

     

     

     

     

    [특징 공간에서 데이터 분포]

    [다차원 특징 공간]

    - 종이에 그릴 수 있는 공간은 3차원으로 제한되지만,

    수학에서는 아주 높은 차원까지 다룰 수 있음

     

    * 2차원 상의 두 점의 거리

     

     

    * d차원 상의 두 점의 거리 

     

     

     

     

     

     

     

     

     

     

    * 특정 공간을 분할하는 결정 경계 (decision boundary)

    - 2~3차원은 그림을 그릴 수 있는데 4차원 이상은 수학적 상상력 필요

     

     

    * 현대 기계 학습이 다루는 데이터

    - 수백~수만 차원 특징 공간

    - 고차원 공간에서 부류들이 서로 꼬여있는 매우 복잡한 분 

     

     

     

     

     

     

     

     

     

     

     

     

    [특징의 분별력]

    * 기계 학습은 높은 분별력을 지닌 특징을 사용해야 함

    - 100여년 전의 iris 데이터는 사람이 네 종류의 특징을 자를 들고 직접 추출

     

    * 다양한 형태의 특징 공간

    - 아래 그림에서 오른쪽으로 갈수록 특징의 분별력이 낮아짐

    - 실제 세상은 (c) ~ (d) 와 같은 비선형 데이터를 생성

    (데이터의 원천적인 성질, 측정이나 레이블링 오류, 특징 설계를 잘못해서 등)

    - 가급적 (d) 보다 (c)와 같은 특징을 사용해야 함

     

     

     

     

     

     

     

     

     

     

     

    [선형 vs 비선형]

    * 선형 (Linear)

    - 직선 (line) 모양

     

     

    * 비선형 (Nonlinear)

    - 직선 모양이 아닌 모든 것

     

     

     

     

     

     

     

     

     

     

     

    [특징 공간을 분할하는 결정 경계]

    * 결정 경계를 정하는 문제에서 고려 사항

    - 비선형 분류기 (nonlinear classifier) 사용

     

     

     

     

    - 과잉 적합 (overfittinig) 회피

    - 과잉 적합은 아웃라이어를 맞히려고 과다하게 복잡한 결정 경계를 만드는 현상

    - 훈련 집한에 대한 성능은 높지만 테스트 집합에 대해서는 형편없는 성능 (일반화 능력 저하)

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    [기계 학습 적용: 모델링과 예측]

    * 모델링과 예측

    - 기계 학습의 핵심

    - 기계 학습에는 아주 다양한 모델이 있음

     

    * 통계적인 머신러닝 접근법은 현재 아래 2가지 정도만 사용

    - SVM (Support Vector Machine)

    - Decision tree (결정 트리)

     

     

     

     

     

     

     

     

    [SVM (Support Vector Machine)]

    * SVM은 분류 및 회귀분석에서 사용 가능

    - 그러나 분류 쪽에 성능 뛰어남

    - 지도 학습 방법

    - Hyper-plane(초평면)을 이용해 카테고리 나눔

     

    * SVM은 분류를 할 때 최고의 마진(margin)을 가져가는 방향으로 분류를 수행

    - Margin: 두 클래스의 support vector 거리

    - 마진이 크면 클수록 학습에 사용하지 않은 새로운 데이터가 들어오더라도 잘 분류할 가능성이 커지기 때문

    - SVM 뿐만 아니라 모든 머신 러닝 학습 방법이 추구하는 방향

     

    * Support Vector

    - hyper-plane으로부터 가장 가까이 있는 vector

     

    - 아래 그림에서, 파란색 점과 빨간색 점을 최대 마진으로 구별하는 직선은 검은색 직선

    - 2차원일 때는 직선이지만, 3차원 이상이면 평면이 되어서 hyper-plane, 즉 평면(plane)라고 부름

     

     

     

     

     

     

     

     

     

     

     

     

     

    [SVM 원리]

    * 기계 학습의 목적은 일반화 능력을 극대화 하는 것

    - SVM은 일반화 능력을 높이려 여백(margin)을 최대화

    - hyper-plane '1'은 오류가 너무 많음

    - hyper-plane '2'은 파란색 부류에 조금만 변형이 생겨도 결정 경계를 넘을 가능성

    - hyper-plane '3'은  두 부류 모두에 대해 멀리 떨어져 있어 경계를 넘을 가능성이 낮음

    - SVM 학습 알고리즘은 여백을 최대화 하는 결정 경계를 찾음

     

     

     

     

     

     

    * SVM을 비선형 분류기로 확장

    - 원래 SVM은 선형 분류기

    - 커널 트릭 (kernel trick)을 사용하여 비선형 분류기로 확장

    - 커널 함수를 사용하여 선형 공간을 비선형 공간으로 변형 (아래 그림)

    - 커널 함수로는 polynomial function, Gaussian radial basis function(RBF), sigmoid 함수를 사용

    - 커널 함수의 종류와 커널 함수의 모양을 조절하는 매개변수가 필요 --> 하이퍼 매개변수

     

     

     

     

     

     

     

     

     

     

     

    [SVM 코드]

    from sklearn import datasets
    from sklearn import svm
    import plotly.express as px


    d = datasets.load_iris()  # 데이터를 읽은 후에,   # 1 데이터 준비
    print(d.DESCR)    # 내용 출력


    for i in range(0, len(d.data)):   # 샘플 순서대로 출력
      print (i+1, d.data[i], d.target[i])


    s=svm.SVC(gamma=0.1, C=10)  # SVM 중 SVC 객체 생성   # 2 모델 생성
    s.fit(d.data, d.target)     # iris 데이터로 학습을 시킴   학습 → fit
    # 3 학습


    new_d = [[6.4, 3.2, 6.0, 2.5], [7.1, 3.1, 4.7, 1.35]]
    # 101, 51번째 데이터를 변형해서 새로운 데이터 생성


    res = s.predict(new_d)  # L:14에서 만든 데이터를 이용해서 예측(predict)
    # 4 예측


    print('새로운 2개 샘플 부류는: ', res)


    df = px.data.iris()
    fig = px.scatter_3d(df, x='petal_length', y='sepal_width', z='petal_width', color='species')  
    # petal_length을 제외하고 3차원 공간 구성
    fig.show()
     

     

     

     

     

     

     

     

     

     

     

     

     

     

    [SVM 하이퍼 매개변수]

    * 하이퍼 매개변수

    - 모델의 동작을 제어하는데 쓰는 변수.

    모델의 학습을 시작하기 전에 설정해야 하는데, 

    적절한 값으로 설정해야 좋은 성능을 얻을 수 있음

     

    * 하이퍼 매개변수 최적화

    - 기계학습의 중요한 주제 중의 하나임

     

     

     

     

     

     

     

     

    [하이퍼 매개변수]

    * C (cost) 하이퍼 매개변수

    - 선형 SVM일 때는 C 매개변수 1개만 존재 

    - 지금까지 모든 샘플을 옳게 분류하는 경우를 다루자면, 실제로는 오류를 허용하는 수 밖에 없음

    - C를 크게 하면, 잘못 분류한 훈련 집합의 샘플은 적은데 여백이 작아짐

    (훈련 집합에 대한 정확률은 높지만 일반화 능력 떨어짐)

    - C를 작게 하면, 여백은 큰데 잘못 분류한 샘플이 많아짐

    (훈련 집합에 대한 정확률은 낮지만 일반화 능력 높아짐)

     

     

    * gamma 라는 하이퍼 매개변수

    - 비선형 SVM 일 때는 C, gamma 매개변수 2개 존재

    - C는 앞과 동일

    - 다음 예는 선형으로는 불가능

     

     

     

    - gamma는 하나의 데이터 샘플이 영향력을 행사하는 거리를 결정

    - 가우시안 함수의 표준편차와 관련되어 있는데, 클수록 작은 표준편차를 갖음

    - 즉, gamma가 클수록 한 데이터 포인터들이 영향력을 행사하는 거리가 짧아지고, gamma가 낮을수록 커짐

     

     

     

     

     

     

     

     

     

     

    * C 하이퍼 매개변수

    - C = 1 인 상황에서는 두 개의 이상치를 인정하고 무난하게 결정 경계를 찾은 반면,

    - C = 100 일 때는 하나의 이상치만 인정하면서 조금은 억지스럽게 분

     

     

     

     

     

     

     

    * gamma 하이퍼 매개변수

    - gamma의 값이 높아짐에 따라 파란색의 공간이 점점 작아짐

    - 서로 합쳐져서 특정 형태가 만들어지는 것임

     

     

     

     

     

     

     

     

     

     

     

     

    [SVM]

    * SVM 적용 예

    - line 11: SVM 분류기 모델 중 SVC(classification) 클래스의 객체를 생성하여 s에 저장

    - line 12: 객체 s의 fit 함수는 훈련 집합을 가지고 학습을 수행

    (매개변수로 특징 벡터 iris.data와 레이블 irist.target을 설정)

    - line 16: 객체 s의 predict 함수는 테스트 집합을 가지고 예측 수행

     

     

     

     

     

     

     

     

     

     

     

     

    [특징 추출과 표현]

    * 기계 학습의 전형적인 과정

    - 실제에서는 다양한 형태로 나타남

    - iris 데이터셋은 채집한 붓꽃의 꽃잎과 꽃받침 크기를 사람이 직접 자로 재서 기록함

    - 데이터 수집과 특징 추출을 사람이 직접 수행한 경우임

    - 딥러닝을 사용하면 사람이 할 일은 사과 영상을 수집하고 등급 레이블을 붙이는 것이 전부

    - 딥러닝은 특징 추출과 모델링을 동시에 최적화 함

    (고전적인 기계학습(SVM) 같은 것을 사용하면 특징 추출을 사람이 설계하고 구현해야 함)

    - 어떤 경우든 특징은 분별력이 높아야 함

     

     

     

     

     

     

     

     

    [특징의 분별력]

    * 사람의 분별력

    - 직관적으로 분별력이 높은 특징을 선택해 사용

    - ex) 두 텀블러를 구분하는 특징

    - 글씨 방향, 몸통 색깔, 손잡이 유무, 뚜껑 유무 등

    - 뚜껑 유무라는 특징은 분별력이 없음

    - 손잡이 유무라는 특징은 높은 분별력

    - 사람은 물체를 인식할 때 본능적으로 가장 분별력이 높은 특징을 선택해 사용함

    - 둘 이상의 특징을 사용하면 분별력을 높일 수 있음

    - ex) 손잡이가 있고 몸통 색이 더 하얀 텀블러라고 말하면 정확하게 인식할 가능성이 커짐

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    [IRIS 특징 추출/표현을 통한 데이터 이해]

    * 특징 공간에서 데이터 분포

     

    * iris 데이터

    - 특징이 4개이므로 4차원 특징 공간을 형성

    - 150개 샘플 각각은 4차원 특징 공간의 한 점

    - 차원을 하나 제외하고 3차원 공간에 데이터 분포를 그림

    - plotly, pandas 라이브러리 설치

     

     

     

     

     

     

     

    [IRIS 특징 추출/표현을 통한 데이터 이해]

    * 특징 공간에서 데이터 분포 관찰 예

    - petal width(수직 축)에 대해 Setosa는 아래쪽, Virfinica는 위쪽에 분포의 실행 결과와 일치

    --> petal width 특징은 분별력(discrimminating power)이 뛰어남 (=분산이 크다)

    - sepal width 축은 세 부류가 많이 겹쳐서 분별력이 낮음

    - 전체적으로 보면, 세 부류가 3차원 공간에서 서로 다른 영역을 차지하는데 몇 개 샘플은 겹쳐 나타남

     

     

     

     

     

     

     

     

     

     

     

    [k-means (k-평균) 알고리즘]

    - k-means 는 군집 분석에서 많이 사용되는 대표적인 알고리즘

    - k는 데이터에서 군집의 수를 의미하고, 

    means(평균)란 중심(centroid)과 동일한 군집의 데이터의 평균을 의미

    - 데이터의 평균을 이용하여 k개의 군집을 만드는 알고리즘으로 1~4단계로 나눔

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    [특징 공간을 분할하는 결정 경계]

    * 인공지능의 인식은 철저히 수학에 의존

    - 샘플은 특징 벡터로 표현되며, 특징 벡터는 특징 공간의 한 점에 해당

    - 인식 알고리즘은,

    특징 공간의 성능을 높이는데 더 유리한 새로운 특징 공간으로 여러 차례 변환한 다음

    최종적으로 특징 공간을 분할하여 부류를 결정

    (특징 공간 변환, 특징 공간 분할로 분류 문제 해결)

    - 특징 공간 변환 예

     

     

     

     

     

     

     

     

     

     

    [기계 학습 적용: 모델링과 예측]

    * 훈련 집합과 테스트 집합

     

    * 훈련 집합

    - 기계 학습 모델을 학습하는데 쓰는 데이터로서 특징 벡터와 레이블 정보를 모두 제공

     

    * 테스트 집합

    - 학습을 마친 모델의 성능을 측정하는데 쓰는 데이터로서 예측할 때는 특징 벡터 정보만 제공하고,

    계산된 예측 결과를 가지고 정확률을 측정할  때 레이블 정보를 사용

     

     

     

     

     

     

     

    [인공지능 설계 사례: 과일 등급을 분류]

    * 인공지능 제품 핵심

    - 데이터를 읽고 모델링과 예측을 수행

    - 붓꽃 영상을 획득하고 특징을 추출하는 컴퓨터 비전 모듈을 전처리로 붙이면 붓꽃 인식 프로그램 완성

     

     

     

     

     

     

     

    * 사과의 상중하의 세 부류로 분류하는 인공지능 기계의 설계

    - 과정 1) 데이터 확보

    - 상중하 비율이 비슷하게 수천 개의 사과 수집

    - 데이터 편향(data bias)을 방지하기 위해 여러 농장에서 수집

    - 카메라로 촬영하여 파일에 저장

     

    - 과정 2) 특징 벡터와 레이블 준비

    - 어떤 특징 사용? 사과의 크기, 색깔, 표면의 균일도는 분별력이 높은 특징

    - 컴퓨터 비전 기술로 특징 추출 프로그램 작성. 특징 추출하여 apple.data 파일에 저장

    - 사과 분류 전문가를 고용하여 레이블링. apple.target 파일에 저장

     

    - 과정 3) 학습하는 과정을 프로그래밍 (훈련 데이터 사용)

     

    - 과정 4) 예측 과정을 프로그래밍 (새로 수집한 테스트 데이터 사용)

     

     

     

     

     

     

     

     

     

     

     

     

     

    [규칙 기반/고전적 기계학습/딥러닝]

    * 규칙 기반 방법

    - 분류하는 규칙을 사람이 구현

    - ex) 꽃잎의 길이가 a보다 크고, 꽃잎의 너비가 b보다 작으면 Setosa라는 규칙에서, 

    a와 b를 사람이 결정해 줌

    - 큰 데이터셋에서는 불가능하고, 데이터가 바뀌면 처음부터 새로 작업해야 하는 비효율성

     

    * 기계 학습 방법

    - 특징 벡터를 추출하고 레이블을 붙이는 과정은 규칙 기반과 동일 (수작업 특징, hand-crafted feature)

    - 규칙 만드는 일은 기계 학습 모델을 이용하여 자동으로 수행 (ex) SVM

     

    * 딥러닝 방법

    - 레이블을 붙이는 과정은 기계 학습과 동일

    - 특징 벡터를 학습이 자동으로 알아냄

    --> 특징 학습 또는 표현 학습을 한다고 말함

    - 장점: 특징 추출과 분류를 동시에 최적화하므로 뛰어난 성능 보장, 인공지능 제품 제작이 빠름

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    [결정 트리]

    from sklearn import datasets
    from sklearn import metrics
    from sklearn.tree import DecisionTreeClassifier


    d = datasets.load_iris()  # 데이터를 읽은 후에,   # 1 데이터 준비
    # print(d.DESCR)    # 내용 출력


    #for i in range(0, len(d.data)):   # 샘플 순서대로 출력
    #  print (i+1, d.data[i], d.target[i])


    dtree_model = DecisionTreeClassifier(max_depth = 4, min_samples_split = 3)  # 2 모델 생성
    dtree_model.fit(d.data, d.target)   # 학습 --> fit                          # 3 학습

    new_d = [[6.4, 3.2, 6.0, 2.5], [7.1, 3.1, 4.7, 1.35]]
    # 101, 51번째 데이터를 변형해서 새로운 데이터 생성
    res1 = dtree_model.predict(new_d)   # L:14에서 만든 데이터를 이용해서 예측(predict)


    print('새로운 2개 샘플 부류는: ', res1)

    res2 = dtree_model.predict(d.data)    # 4 예측
    # res2와 원래 정답 d.target과의 비교
    print('정확도: ', metrics.accuracy_score(res2, d.target))

     

     

     

     

    * 결정 트리 (decision tree)

    - 트리를 이용하여 예측하는 방법

    - 질문을 던져 스무고개처럼 대상을 좁혀 나가면 분류 문제를 쉽게 해결할 수 있음

    - 우리가 의사결정하는 과정과 유사하며 해석이 매우 쉬운 쉬운 장점

     

     

     

     

     

     

     

    * 불순도 (impurity)

    - 노드에 클래스가 순수 (pure) 하지 않은 정도

    - 노드에 2개 이상의 서로 다른 클래스가 있다면 순수하지 않은 것

    - 노드 1: 서로 다른 클래스(노란색 사각형, 파란색 원)가 1:1 의 비율로 섞여 있으며 가장 불순도가 높음

    - 노드 3: 클래스(노란색 사각형)가 순수한 상태로 불순도 값이 가장 낮고,

    - 노드 2: 노드 1과 노드 3의 중간 정도의 값을 가지고 있음

     

     

     

     

     

     

    * 엔트로피 (entropy)

    * 무질서도

    - 원래 엔트로피가 증가하는 쪽으로, 즉 무질서해지는 쪽으로 변하려 함 

    - 일반적으로 에너지를 방출하는 쪽으로 변하려 하지만, 

    경우에 따라서는 외부로부터 에너지를 흡수해가면서까지 무질서해지려 

    - 엔트로피는 에너지의 쓸모를 나타내는 양. 엔트로피가 적은 에너지는 쓸모가 많고 잘 사용할 수 있다는 것을 의미.

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    * 결론

    - [방법2] 의 정보 획득 값이 0.61로 [방법1]의 0.1245보다 크므로 [방법2]로 분할하는 것이 더 좋음

    (엔트로피가 0인 것이 순수)

     

    * [방법2]를 이용하여 분활한 결과를 두 가지 방법으로 표현한 것

    - 결정 트리 표현 방법에서 '길이 < 50'으로 먼저 분할하면 [1]은 노란 사각형만 남아 더 이상 분할하지 않아도 됨

    - 오른쪽 자식 노드는 위와 동일한 방법으로 '무게 < 27'로 분할하면 단말 노드가 모두 순수(pure)하게 잘 분할

    - 앞에서 배운 정보 획득의 과정을 한 번 더 거치면 [2], [3]과 같이 분류할 수 있음

     

     

     

     

     

     

     

     

     

     

    * 과잉적합 (overfitting)

    - 데이터의 양이 많아지면 분할되는 노드의 개수가 매우 많음

    - 트리가 복잡해질수록 훈련 데이터에 대해서는 정확도가 높지만, 

    새로운 데이터에 대해서는 오버 피팅

    --> 이것을 결정트리에서는 '가지치지(pruning)' 라고 함

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

    '학교 > 인공지능' 카테고리의 다른 글

    5_인공지능개론  (1) 2024.06.08
    4_인공지능개론  (0) 2024.06.06
    2_인공지능개론  (1) 2024.04.20
    결정 트리 코드  (1) 2024.04.19
    SVM 코드  (0) 2024.04.19
Designed by Tistory.