요약

https://ko.wikipedia.org/wiki/%EA%B2%B0%EC%A0%95_%ED%8A%B8%EB%A6%AC_%ED%95%99%EC%8A%B5%EB%B2%95

 

결정 트리 학습법 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 결정 트리 학습법(decision tree learning)은 어떤 항목에 대한 관측값과 목표값을 연결시켜주는 예측 모델로써 결정 트리를 사용한다. 이는 통계학과 데이터 마이닝, 기계 학습에서 사용하는 예측 모델링 방법 중 하나이다. 트리 모델 중 목표 변수가 유한한 수의 값을 가지는 것을 분류 트리라 한다. 이 트리 구조에서 잎(리프 노드)은 클래스 라벨을 나타내고 가지는 클래스 라벨과 관련있는 특징들의 논리곱을 나타낸

ko.wikipedia.org

 

의사결정나무와 엔트로피

https://gomguard.tistory.com/86

 

[머신러닝] 의사결정트리 (Decision Trees)

지도학습 알고리즘 지도학습 관련 알고리즘들로는 최근접 이웃 (Nearest Neighbor) 나이브 베이즈 (Naive Bayes) 의사결정 트리 (Decision Trees) 분류 규칙 학습자 (Classification Rule Learners) 선형 회귀 (L..

gomguard.tistory.com

https://danbi-ncsoft.github.io/study/2018/12/06/entropy.html

 

의사결정 나무와 엔트로피

 

danbi-ncsoft.github.io

분류트리

https://becominghuman.ai/decision-trees-in-machine-learning-f362b296594a

 

Decision Trees in Machine Learning

Trees occupy an important place in the life of man. The trees provide us flowers, fruits, fodder for animals, wood for fire and furniture…

becominghuman.ai

https://www.youtube.com/watch?v=2Rd4AqmLjfU

 

회귀트리

https://ratsgo.github.io/machine%20learning/2017/03/26/tree/

 

의사결정나무(Decision Tree) · ratsgo's blog

이번 포스팅에선 한번에 하나씩의 설명변수를 사용하여 예측 가능한 규칙들의 집합을 생성하는 알고리즘인 의사결정나무(Decision Tree)에 대해 다뤄보도록 하겠습니다. 이번 글은 고려대 강필성 교수님 강의와 김성범 교수님 강의를 참고했음을 먼저 밝힙니다. 그럼 시작하겠습니다. 모델 소개 의사결정나무는 데이터를 분석하여 이들 사이에 존재하는 패턴을 예측 가능한 규칙들의 조합으로 나타내며, 그 모양이 ‘나무’와 같다고 해서 의사결정나무라 불립니다. 질문을

ratsgo.github.io

http://dm.snu.ac.kr/static/docs/dm2015/Chap9_%20%EC%9D%98%EC%82%AC%EA%B2%B0%EC%A0%95%EB%82%98%EB%AC%B4.pdf

불러오는 중입니다...

의사결정트리 알고리즘

http://contents2.kocw.or.kr/KOCW/document/2017/yeungnam/leejeayoung/4.pdf

불러오는 중입니다...

ID3 (Iterative Dichotomiser 3) - 범주형자료만 분류가능

https://jihoonlee.tistory.com/16?category=725291

 

Decision Tree + ID3알고리즘

Decision Tree(결정트리) 어떤 항목에 대한 관측값과 목표값을 연결시켜주는 예측 모델로써 결정 트리를 사용한다. 장점 1. 결과를 해석하고 이해하기 쉽다.간략한 설명만으로 결정 트리를 이해하는 것이 가능하다..

jihoonlee.tistory.com

C4.5 (successor of ID3) - 수치형(범주형)자료처리

C5.0 (successor of ID4)

https://jihoonlee.tistory.com/17?category=725291

 

Decision Tree + C4.5알고리즘

Decision Tree + C4.5알고리즘 c4.5 특징 1. 수치형 자료를 처리한다. 2. 불완전한 데이터를 처리한다. 3; 가지치기로 과적합을 해결한다. GainRatio < 참고1, 참고2> Information Gain의 문제점은 많은 측정값을..

jihoonlee.tistory.com

CART (Classification And Regression Tree)
CHAID (CHi-squared Automatic Interaction Detector) : 이 알고리즘은 분류 트리를 계산할 때 다단계 분할을 수행한다.
MARS (Multivariate adaptive regression splines) : 더 많은 수치 데이터를 처리하기 위해 결정 트리를 사용한다.
조건부 추론 트리 (Conditional Inference Trees) : 과적합을 피하기 위해 여러 테스트에 대해 보정 분할 기준으로 비 - 파라미터 테스트를 사용하는 통계 기반의 방법이다. 이 방법은 편견 예측 선택 결과와 가지 치기가 필요하지 않다.

 

ID3와 CART방법은 비슷한 시기인 1970년과 1980년 사이에 독립적으로 발명되었으며, 훈련 쌍에 대해 의사 결정 트리 학습을 위한 유사한 접근 방식을 사용한다. 위 알고리즘들 중에서 ID3, C4.5, C5.0 알고리즘들은 인공지능, 기계학습 분야에서 개발되어 발전되어 왔다. 이에 반해, CART 및 CHAID 알고리즘은 통계학에 분야에서 개발된 알고리즘들이다. 인공지능, 기계학습 계열의 알고리즘들은 엔트로피, 정보이득 개념을 사용하여 분리기준을 결정하고, 통계학에 기초한 CART 및 CHAID 알고리즘들은 카이스퀘어, T검정, F검정 등의 통계분석법을 사용한다.

 

http://katalog.egloos.com/3191268

 

Decision Tree(의사결정트리)

▷▶ 의사결정나무분석(Decision Tree)의사결정나무분석은 예측과 분류를 위해 보편적이고 강력한 툴이다. 신경망구조 분석과는 달리 나무구조로 규칙을 표현하기 때문에 이해하기가 쉽다. 어떤 적용에서는 얼마나 잘 분류하거나 예측하는냐만이 문제화되기도 한다. 즉, DM발송회사는 모델이 어떻게 구성되었는지 보다는 얼마나 자신의 메일에 잘 대답을 해줄 수 있는

katalog.egloos.com

 

과적합 방지알고리즘

https://www.youtube.com/watch?v=JM7TePqW5H0

 

랜덤포레스트

https://swalloow.tistory.com/92

 

의사결정트리와 랜덤포레스트

의사결정트리 (DecisionTree) 의사결정나무는 다양한 의사결정 경로와 결과를 나타내는데 트리 구조를 사용합니다. (우리에게 그나마 가장 익숙한 데이터 분석 기법입니다...) 보통 어렸을 때의 스무고개 놀이를..

swalloow.tistory.com

 

'머신러닝 > 스터디 정리' 카테고리의 다른 글

용어정리 1  (0) 2019.02.09
Activation Function  (0) 2018.08.26
PCA 구현하기  (0) 2018.08.20
numpy 간단한 선형회귀 예제  (0) 2018.08.18
numpy 연산2  (0) 2018.08.18

용어정리


피어슨상관계수

https://support.minitab.com/ko-kr/minitab/18/help-and-how-to/statistics/basic-statistics/supporting-topics/correlation-and-covariance/a-comparison-of-the-pearson-and-spearman-correlation-methods/


Confusion Matrix(분류결과표)

https://bcho.tistory.com/1206


크로스탭

열과 행을 회전시킨 테이블


Feature Engineering

http://hero4earth.com/blog/learning/2018/01/29/Feature_Engineering_Basic/#feature-engineering


Feature Engineering은 머신러닝 알고리즘을 작동하기 위해 데이터에 대한 도메인 지식을 활용하여 특징(Feature)를 만들어내는 과정입니다. < Wikipedia - Feature Engineering 정의 >


다른 정의를 살펴보면, 머신러닝 모델을 위한 데이터 테이블의 컬럼(특징)을 생성하거나 선택하는 작업을 의미한다고 합니다.


간단히 정리하면, 모델의 성능을 높이기 위해 모델에 입력할 데이터를 만들기 위해 주어진 초기 데이터로부터 특징을 가공하고 생성하는 전체 과정을 의미합니다.


Feature Engineering은 모델 성능에 미치는 영향이 크기 떄문에 머신러닝 응용에 있어서 굉장히 중요한 단계이며, 전문성과 시간과 비용이 많이 드는 작업입니다.



Bigrams / Trigrams


ex ) "I read a book about the history of America."

1. unigram :  "I", "read", "a", "book", "about", "the", "history", "of", "America"

2. bigram (digram) :  "I read", "read a", "a book", "book about", "about the", "the history", "history of", "of America"

3. trigram : "I read a", "read a book", "a book about", "book about the", "about the history", "the history of", "history of America"


사용 예) search engieen에서 키워드를 뽑아내는 용도

음석인식에서 자연어처리할때



모수/비모수

1. 모수적 통계의 전제조건

관측값이 어느 특정한 확률분포, 예를 들면 정규분포, 이항분포 등을 따른다고 전제한 후 그 분포의 모수(parameter)에 대한 검정을 실시하는 방법이다 

① 표본의 모집단이 정규분포를 이루어야 한다

② 집단내의 분산은 같아야 한다

③ 변인은 등간척도나 비율척도로 측정되어야 한다 → 이 조건이 충족되지 않으면 비모수 통계를 사용한다

- 등간척도: 간격척도 라고도 한다. 간격이 일정하여 덧셈 뺄셈은 가능하지만, 0이 아무것도 없는 것을 뜻하는 것이 아니기 때문에 몇 배라고 이야기 할 수 없는 척도 -시각, 섭씨온도, 화씨온도 

- 비율척도 : 0 기준으로 하기 때문에 비율이 가능한 척도. 우리가 사용하는 대부분의 변수가 여기에 해당 -성적, 키, 무게, 인구수, 금액 등)

cf) 명목척도 : 상하 관계는 없고 구분만 있는 척도 (남, 여, 국적.. 등)

    서열척도 : 크기는 있지만 그 간격이 얼마나 큰지 알 수 없을 때 (직위, 학렬, 등수, 친한친구 순서 등)


2. 비모수검정

① 모집단이 정규분포한다는 가정을 할 수 없는 경우에 모집단의 분포 유형에 관계없이 적용할 수 있는 방법이다

-종속변수가 연속변수인데 sample size가 작아(<30) 모집단에 대해 어떤 분포도 가정할 수 없는 경우가 있다

② 변수가 명목척도나 서열척도로 측정하는 경우에 분류기준과 분류방법의 독립성을 검정 가능하다

③ 모집단의 특성을 나타내는 모수에 대한 검정의 목적이 아닌경우, 이론분포와 경험분포간의 적합도(goodness of fit test)를 검정 가능하다


출처 : https://sherry-data.tistory.com/15



상관계수

https://mansoostat.tistory.com/115 상관계수 총정리

https://socialinnovation.tistory.com/141 카이제곱검정

http://m.blog.daum.net/_blog/_m/commentList.do?blogid=06PmS&articleno=11416177



scikit-learn문서전처리

https://datascienceschool.net/view-notebook/3e7aadbf88ed4f0d87a76f9ddc925d69/

python 문법

pandas.reset_index


reset_index 명령으로 인덱스를 보통의 자료열로 바꿀 수도 있다. 이 때 인덱스 열은 자료열의 가장 선두로 삽입된다. 데이터프레임의 인덱스는 정수로 된 디폴트 인덱스로 바뀐다.

https://datascienceschool.net/view-notebook/a49bde24674a46699639c1fa9bb7e213/



pandas.apply

http://www.leejungmin.org/post/2018/04/21/pandas_apply_and_map/


python.istitle

 s = 'I am a boy'

 split_s = s.split()

 istitle_s = [w for w in split_s if(w.istitle())]

 print(istitle_s) #['I'] 



stopword

https://wikidocs.net/22530



plt.violinplot

  • 박스 플롯과 매우 유사.
  • 박스 플롯에서 아웃라이어로 표시되는 데이터까지 하나의 곡선 안에 모두 표시해준다.

      https://datascienceschool.net/view-notebook/84bf5b15b4fc4dd5aa0672bfdfd7c971



pd.melt

https://rfriend.tistory.com/tag/pd.melt%28%29


'머신러닝 > 스터디 정리' 카테고리의 다른 글

의사결정나무  (0) 2019.06.09
Activation Function  (0) 2018.08.26
PCA 구현하기  (0) 2018.08.20
numpy 간단한 선형회귀 예제  (0) 2018.08.18
numpy 연산2  (0) 2018.08.18

활성(화)함수란 입력을 받아 피쳐의 활성, 비활성을 결정하는데 사용되는 함수이다.


선형함수는 입력의 상수배만큼 변하는 것으로 

f(x) = x(항등함수) 또는 f(x) = ax 또는 f(x) = ax + b등 의 1차 함수가 있으며

모두 1개의 직선 모양이다.


반대로 비선형은 2개 이상의 직선 또는 곡선의 모양을 가지고 있다.

비선형에는 Sigmoid, ReLU 등이 있다.



    



사용할 활성화 함수를 선택할 때는 풀고자 하는 문제의 종류를 고려해야 한다.


선형회귀문제

문제의 결과가 직선을 따르는 경향이 있다면 선형함수(y=wx+b)를 주로 이용한다.


분류문제

2개를 분류하는 문제일 때는 선형함수만으로는 정확하게 분류하기 힘들어지는 경향이 있다.

그래서 비선형 함수인 sigmoid, ReLU와 그 변형된 활성화함수를 주로 이용한다.


3개 이상을 분류할 때 주로 Softmax와 그 변형된 활성화함수를 주로 이용한다.


목표 정확도와 학습시간 등을 고려하여 선택하고 혼합 사용도 가능하다.


신경망에서는 활성화 함수로 선형함수가 아닌 비선형함수를 사용해야 한다.

왜냐하면 히든레이어를 여러 개 다층으로 구성하고 활성화함수로 모두 선형함수를 이용하는 경우

단층으로 구성한 것과 정확하게 동일하게 구현할 수 있다. 곧 무의미하다.


'머신러닝 > 스터디 정리' 카테고리의 다른 글

의사결정나무  (0) 2019.06.09
용어정리 1  (0) 2019.02.09
PCA 구현하기  (0) 2018.08.20
numpy 간단한 선형회귀 예제  (0) 2018.08.18
numpy 연산2  (0) 2018.08.18

1. 데이터를 같은 범위로 rescaling한다.

<사용 라이브러리>

- from sklearn.preprocessing import StandardScaler

  x_std = StandardScaler().fit_transform(X)

  

2 데이터의 상관행렬을 구한다.

<사용 라이브러리>

- import numpy as np

  features = x_std.T 

  covariance_matrix = np.cov(features)


3. 고유벡터와 고유값을 구해서 가장큰 고유값을 가진 고유벡터를 구한다.

<사용 함수>

eig_vals, eig_vecs = np.linalg.eig(covariance_matrix)

(이 고유벡터를 사용했을때의 데이터 유실정도)

eig_vals[0] / sum(eig_vals)


4. 현재 x값을 eig_vecs에 정사영 시킨다.

projected_X = x_std.dot(eig_vecs.T[0])

'머신러닝 > 스터디 정리' 카테고리의 다른 글

용어정리 1  (0) 2019.02.09
Activation Function  (0) 2018.08.26
numpy 간단한 선형회귀 예제  (0) 2018.08.18
numpy 연산2  (0) 2018.08.18
numpy 연산  (0) 2018.08.18

코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
##선형회귀(MSE)
 
%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
 
 
= np.array([1234])
= np.array([-420.92.1])
 
= np.vstack([x, np.ones(len(y))]).T
w,b = lin.lstsq(A,y)[0]
 
print('model:',w,'* x +',b)
 
plt.plot(x,y, 'x', label='orignal_data', markersize=10)
plt.plot(x, w * x + b , 'r', label='linearRegression')
plt.legend()
plt.grid(True)
plt.show()
cs


결과


'머신러닝 > 스터디 정리' 카테고리의 다른 글

Activation Function  (0) 2018.08.26
PCA 구현하기  (0) 2018.08.20
numpy 연산2  (0) 2018.08.18
numpy 연산  (0) 2018.08.18
numpy 기본  (0) 2018.08.18

코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import numpy as np
import numpy.linalg as lin
 
x1 = np.array([[1,2,3],[4,5,6]])
y1 = np.array([[4,0,3],[5,5,6]])
 
#행렬 곱
np.dot(x1, y1.T)
 
#역행렬
x2 = np.array([[2,2,0],[-2,1,1],[3,0,1]])
lin.inv(x2)
 
#qr분해 : 실수 행렬을 직교 행렬과 상삼각 행렬의 곱으로 나타내는 행렬 분해
#return q 직교행렬 , r 상삼각행렬
q,r = lin.qr(x2)
print(q)
print(r)
 
#행렬의 대각합
= np.trace(x2)
print(s)
 
#행렬식
ans = lin.det(x2)
print(ans)
 
#고유치, 고유벡터
x3 = np.array([[1,2,1],[6,-1,0],[-1,-2,-1]])
print(lin.eig(x3))
 
#연립방정식 구하기
x4 = np.array([[3,2,1], [1,-1,3],[5,4,-2]])
x5 = np.array([7,3,1])
lin.solve(x4,x5)
cs


결과

[[-0.48507125 -0.80845208 -0.33333333]

 [ 0.48507125 -0.56591646  0.66666667]

 [-0.72760688  0.16169042  0.66666667]]


[[-4.12310563 -0.48507125 -0.24253563]

 [ 0.         -2.18282063 -0.40422604]

 [ 0.          0.          1.33333333]]


4


12.0


(array([ -4.00000000e+00,   3.00000000e+00,   1.71642331e-16]), 

 array([[ 0.40824829, -0.48507125, -0.0696733 ],

       [-0.81649658, -0.72760688, -0.41803981],

       [-0.40824829,  0.48507125,  0.90575292]])

)


array([-3.,  6.,  4.])


'머신러닝 > 스터디 정리' 카테고리의 다른 글

PCA 구현하기  (0) 2018.08.20
numpy 간단한 선형회귀 예제  (0) 2018.08.18
numpy 연산  (0) 2018.08.18
numpy 기본  (0) 2018.08.18
경사하강법  (0) 2018.08.17

코드


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import numpy as np
 
= np.random.rand(5,5)
#x행렬
print (x)
 
#x합, 누적합(적분할때 사용)
print(x.sum())
print(x.cumsum())
 
#최대값과 최대값인덱스
print(x.max())
print(x.argmax())
 
#최소값과 최소값인덱스
print(x.min())
print(x.argmin())
 
#평균, 분산, 표준편차
print(x.mean())
print(x.var())
print(x.std())
cs

결과

[[ 0.10240699  0.16281877  0.65259539  0.05348428  0.0789152 ]

 [ 0.45684587  0.09063321  0.86011799  0.3046612   0.84638217]

 [ 0.70048107  0.78853868  0.3888844   0.77350618  0.64421104]

 [ 0.5472133   0.88216526  0.53800434  0.86136756  0.32777754]

 [ 0.70198885  0.75049795  0.3057293   0.02031379  0.26909527]]


12.1086355981


[  0.10240699   0.26522577   0.91782116   0.97130544   1.05022064

   1.50706651   1.59769972   2.45781771   2.76247891   3.60886108

   4.30934215   5.09788084   5.48676524   6.26027142   6.90448246

   7.45169575   8.33386101   8.87186535   9.73323291  10.06101045

  10.76299929  11.51349724  11.81922654  11.83954033  12.1086356 ]


0.882165257134

16


0.0203137898229

23


0.484345423925

0.0835583157313

0.289064552879


'머신러닝 > 스터디 정리' 카테고리의 다른 글

numpy 간단한 선형회귀 예제  (0) 2018.08.18
numpy 연산2  (0) 2018.08.18
numpy 기본  (0) 2018.08.18
경사하강법  (0) 2018.08.17
상관계수  (0) 2018.08.16

예제

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
import numpy as np
 
#random
print(np.random.randn(3,2)) #정규분포
print(np.random.rand(3,2))
 
# #일행렬
#np.ones((3,3))
 
# #영행렬
# np.zeros((3,3)
 
# #단위행렬
#np.eye(2)
         
array = np.array([[1,2,3],[1,1,2],[6,7,8]])
 
#행렬크기
print('array.size :', array.size)
 
#행렬길이
print('len(array):'len(array))
 
#행렬차원
print('array.ndim:', array.ndim)
 
#데이터 타입
print('array.dtype :', array.dtype)
 
 
#행렬 사칙연산
# *, /는 각 요소별로 곱하고 나눔, 행렬곱 아님!
print(array + 3)
print(array - 3)
print(array * 3)
print(array / 3)
print(array ** 3#np.sqrt(array) = array** 0.5
 
#전치행렬
print('T:',array.T)
 
#행렬곱
print(np.dot(array, array.T))
 
#등간격의 숫자배열
array2 = np.arange(10)
print(array2)
 
#인덱싱
print(array2[2])
#슬라이싱
print(array2[:2])
 
#배열복사
print(array2.copy())
 
cs



결과

[[ 2.07174667 -1.94407016]

 [-1.1018612  -0.45834679]

 [-0.98830247  0.85964834]]

[[ 0.06291298  0.06378314]

 [ 0.26350543  0.08411712]

 [ 0.24001356  0.70935658]]

array.size : 9

len(array): 3

array.ndim: 2

array.dtype : int32

[[ 4  5  6]

 [ 4  4  5]

 [ 9 10 11]]

[[-2 -1  0]

 [-2 -2 -1]

 [ 3  4  5]]

[[ 3  6  9]

 [ 3  3  6]

 [18 21 24]]

[[ 0.33333333  0.66666667  1.        ]

 [ 0.33333333  0.33333333  0.66666667]

 [ 2.          2.33333333  2.66666667]]

[[  1   8  27]

 [  1   1   8]

 [216 343 512]]

Transposit: [[1 1 6]

 [2 1 7]

 [3 2 8]]

[[ 14   9  44]

 [  9   6  29]

 [ 44  29 149]]

[0 1 2 3 4 5 6 7 8 9]

2

[0 1]

[0 1 2 3 4 5 6 7 8 9]




[참조]

http://taewan.kim/post/numpy_cheat_sheet/

http://pinkwink.kr/715?category=522424

'머신러닝 > 스터디 정리' 카테고리의 다른 글

numpy 연산2  (0) 2018.08.18
numpy 연산  (0) 2018.08.18
경사하강법  (0) 2018.08.17
상관계수  (0) 2018.08.16
PCA  (0) 2018.08.14

+ Recent posts