반응형

특징량

feature:

데이터에서 변화를 나타내는 한 가지 이상의 변수 쌍 또는 변수 쌍을 사용한 계산 식

 

출처 : 처음 배우는 인공지능

반응형

'개념 정리' 카테고리의 다른 글

선형 계획 문제_20211103  (0) 2021.11.08
선형계획법_20211102  (0) 2021.11.08
변수_20211031  (0) 2021.11.08
마르코프 모델_20211028  (0) 2021.11.05
오토마톤_20211027  (0) 2021.11.03
반응형

소스코드.ipynb
0.02MB

'인공지능 데이터 분석 시스템'에서 중요한 개념 하나는 '주어진 데이터를 비교해 원하는 결과를 찾는 기능

입니다. 이는 회귀분석을 이용해 최적해optimal solution와 유사도라는 지료를 계산하는 것입니다.

 

01. 선형 문제와 비선형 문제

풀기 쉬운 문제 (선형문제)와 풀기 어려운 문제(비선형 문제)를 살펴봅니다.

 

두 변수의 상관관계

데이터를 다룰 때 데이터를 구성하는 항목을 변수라고 합니다.

그리고 데이터에서 변화를 나타내는 한 가지 이상의 변수 쌍, 또는 변수 쌍을 사용한 계산 식을 특징량 feature이라고 합니다.

 

선형 계획법과 비선형 계획법

선형 계획법: 선형 함수를 최적화해 문제를 해결하는 것을 linear programming

변숫값 쌍으로 구성하는 점들이 일직선 상에 놓이는 것처럼 보인다면 선형 함수일 가능성이 있습니다. 1차 함수

"배낭 문제"

정수에 한정해서 문제를 해결할 때는 정수 계획 문제라고도 합니다.

 

사상 morphism: 변숫값 쌍을 점 형태로 나타낼 수 있다면 함수 형태로 변화된 것입니다.

일대일 함수 , 단수 함수

일대일 대응 

 

비선형 계획법 Nonlinear programming 비선형 문제

볼록 함수

오목함수

볼록함수가 아닐 때는 선형 계획 문제와 볼록 계획 문제를 조합한 분기 한정법 branch and bound, BB으로 해결하는 방법 등이 있습니다.

 

02. 회귀분석 

회귀분석은 주어진 데이터로 어떤 함수를 만들어 낸 후 , 이 함수를 피팅하는 작업입니다. 

피팅은 함수에서 발생하는 차이(잔차 Residual의 크기)가 최소화되도록 함수를 조정해주는 것을 의미합니다.

 

선형 모형 General Linear Model "잔차의 분포가 정규분포를 따른다."는 전제로 만들어진 함수

일반화 선형 모형 Generalized Linear Model:임의의 분포로 만들어진 함수

 

단순회귀: 가장 기본적인 회귀분석은 요소들 사이의 비례 관계를 활용하는 단순회귀 분석(단일회귀)입니다.

예: 신장과 체중 사이 관게

 

회귀직선의 기울기와 절편 구하기

 

다중회귀: 독립 변수가 여러개인 경우의 회귀분석

 

다중공선성Multicollinearity 문제 : 독립 변수들 각각의 선형 독립어어야 한다는 것이 회귀분석의 전제인데 독립변수의 수가 늘면 독립 변수들 사이에 존재하는 상관관계가 가입해 결과에 영향을 주는 것입니다.

 

다항식 회귀

 

 

로지스틱 회귀 : 종속 변수에 약간의 수정을 가한 선형회귀로 다항식 회귀처럼 일반화 선형 모델의 하나로 분류합니다.

 

 

03. 가중 회귀분석 

 

최소제곱법 수정 : 특깃값 Singular Value에 취약하다는 약점이 있습니다.

Lowess분석 : 어떤 한 지점에 가중회귀 함수를 사용해 평활화 smoothing를 실행한 회귀식 도출 방법입니다.

 

l2정규화 ,l1정규화

페널티를 부여하는 방식은 l2정규화 , l1정규화 , l1정규화 와 L2정규화를 선형 결합한 일래스택 넷Elastic Net등이 있습니다.

페널티를 부여하는 항을 벌칙 항 penalty term또는 정규화항 regularization term이라고 합니다.

 

04. 유사도 

비교하는 대상이 얼마나 비슷한지 확인하는 유사도를 설명합니다.

 

코사인 유사도 : 변숫값 쌍 x,y가 주어졌을 때 문서사이의 유사도를 계산

 

상관계수: "2개의 확률 볁수 사이 분포 규칙의 관계(한쪽이 증가하면 다른 한쪽도 증가하고 한쪽이 감소하면 다른 한쪽도 감소하는 것)로 , 대부분 선형 관계의 정도를 의미한다"고 말할 수 있습니다.

상관계수 1~-1사이의 값으로 나타내며 양의 값이면 양의 상관관계를 , 음의 값이면 음의 상관관계입니다.

스피어만의 순위 상관계수 : 스피어만의 순위 상관계수는 피어슨 상관계수의 특별한 경우입니다. 같은 순위가 있다면 순위 를 보정(같은 순위의 우선순위를 따짐)해야 하지만 , 같은 순위으 수가 적을 떄는 순위 보정 없이 상관계수를 구해도 괜찮습니다.

 

켄달의 순위 상관계수

켄달의 순위 상관계수는 같은 순위인 데이터의 개수 K, 다른 순위인 데이터의 개수 L을 사용해 개산합니다.

켄달의 순위 상관계수는 1~-1사이의 값이며 , 1이나 -1에 가까울 수록 강한 상관관계가 있습니다. 상관관계가 없는 경우에는 0이 됩니다.

 

상관함수 

함수는 특정 시점의 결괏값을 구할 수 있으므로 함수 결괏값 쌍으로 상관계수를 구한 후 이를 함수로 나타내면 됩니다. 이를 상관함수라고 합니다.

교차상관함수는 두 함수에서 어떤 시점의 두 함수 결괏값 쌍의 상관계수를 구해 함수로 나타내는 것입니다.

자기상관함수는 두 함수가 같은 함수일 때 서로 다른 시점의 함수 결괏값 상관계수를 구할 때 사용합니다.

 

거리와 유사도

편집거리Edit distance: 치환 ,삽입 , 삭제의 세가지 요소에 각각 페널티를 설정하는 형태를 취하고 페널티의 합계를 점수로 설정해 유사도를 규정합니다.

레벤슈타인 거리 Levenshtein distance: 값이 아닌 문자열 사이의 유사도를 나타낼 때 사용하는 것 

해밍거리 Hamming distance:  고정 길이의 이진 데이터에서 서로 다른 비트 부호 수를 갖는 문자 개수

2개 비트열의 배타적 논리합을 구한 결과에 존재하는 1의 개수가 해밍거리입니다. 주로 오류 검사에 이용합니다.

 

해밍 거리와 레벤슈타인 거리

유클리드 거리 :점 2개의 좌표 사이 직선거리

마할라노비스 거리 Mahalanobis distance: 는 유클리드 거리에서 점수를 늘려 거리를 구하는 것을 말합니다.

마할라노비스 거리는 데이터의 상관관계를 고려한 여러 개의 점 집단에서 어는 점까지의 거리를 계산합니다.

 

자카드 계수: 집합 2개의 유사도를 구할 때 집합 2개의 공통 요소 수를 전체 요소 수로 나눈것을 자카드 Jaccard계수라고 합니다.

단순히 벤 다이어그램을 그려서 구할 수 있으며 집합을 구성하는 요소가 수치인지 문자열인지를 고려하지 않아도 되므로 편리합니다.

 

05. 텐서프로를 이용한 선형 회귀 예제

y = wx+b

 

필요한 모델 불러오기

import tensorflow as tf
import matplotlib.pyplot as plt
tf.__version__

'1.15.0'

 

하이퍼파라미터 설정하기 

learning_rate = 0.01
num_epochs = 1000
step_display = 50

 

 

학습에 이용할 데이터 정의

x = [2.7,  4.8,  9.3, 13.4,  24.8,  31.3,  48.5,  53.0,  68.1,  74.2, 88.6,94.5]
y = [7.0, 28.8, 28.8, 67.1, 48.8, 100.2, 140.0, 190.2, 215.2, 285.6, 260.3, 251.1]
assert len(x) == len(y)
len(x)

12

assert문을 활용해 x와 y의 개수가 같지 않음녀 에러가 발생합니다.

 

가중치 weight와 편향 bias

tf.random_uniform()함수는 무작위 수로 초기화 하는데 , [1]은 변수의 형태를 , -1.0은 최솟값, 1.0은 최댓값을 의미

-1.0 ~ 1.0 사이의 스칼라값을 무작위로 생성합니다.

name 인자는 텐서프로에 이름을 알려주려고 사용합니다.

weight = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name = 'weight')
bias = tf.Variable(tf.random_uniform([1], -1.0, 1.0), name = 'bias')

모델을 학습시킬 때 x좌표와 y좌표를 피드해줄 플레이스홀더 를 정의 합니다. tf.placeholder()

x_true = tf.placeholder(dtype = tf.float32, name='x_true')
y_true = tf.placeholder(dtype = tf.float32, name='y_true')

플레이스홀더는 그래프를 구출할 때는 메모리에 저장하지 않음며 그래프를 실제 실행할 때 피드하면서 메모리에 저장합니다.

 

그래프 만들기

y_pred 예측 값 y = wx+b

y_pred = tf.add(tf.multiply(weight, x_true) , bias)

예측값은 y_pred에서 실제값인 y_true를 뺀 값에 제곱해서 평균을 계싼한 값이 비용(cost또는 loss)이 됩니다.

cost = tf.reduce_mean(tf.square(y_pred - y_true))

비용을 최소화할 optimizer를 정의합니다.

optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)

 

학습 시작하기

세션을 실행하고 변수를 초기화합니다. 텐서플로는 세션 실행 시 반드시 모든 전역 변수를 초기화해야 합니다.

init = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init)

학습

for epoch in range(0,num_epochs):
    _, c = sess.run([optimizer, cost], feed_dict={x_true: x, y_true: y})
    if (epoch+1) % step_display == 0:
        print("Epoch: {0}, cost: {1}, weight: {2}, bias: {3}".format(
         epoch+1, c, sess.run(weight), sess.run(bias)))

print("최적화 작업을 완료했습니다.")

xrange(num_epochs)-> range(0,num_epochs)

결과 :

최종 비용 ,가중치 편향을 구해 출력합니다.

training_cost =  sess.run(cost, feed_dict = {x_true:x, y_true:y})
print("최종 cost: {}".format(c))
print("최종 weight: {}".format(sess.run(weight)))
print("최종 bias: {}".format(sess.run(bias)))

 

그래프로 직선 비교하기

x좌표와 y좌료를 이용해 빨간색의 동그라미 형태로 점을 찍습니다.

  • ro에서 r은 빨간색을 o는 동그라미를 의미합니다.
  • 학습의 결과로 얻은 최적화된 선을 그립니다.
  • 범례(legend())를 보여줍니다.
  • 시각화한 그래프를 출력합니다.
plt.plot(x,y,'ro', label='Original data')
plt.plot(x,sess.run(weight)* x + sess.run(bias) , label = 'Optimized line')
plt.legend()
plt.show()

 

마지막으로 세션을 닫습니다.

sess.close()

 

 

출처 : 처음 배우는 인공지능

 

반응형

+ Recent posts