일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- siss
- 생활코딩
- PHP 웹페이지 만들기
- 자료구조 복습
- 드림핵
- Javascript
- The Loard of BOF
- WarGame
- CSS
- C언어
- c
- 머신러닝
- 웹페이지 만들기
- 기계학습
- 파이썬
- 풀이
- HTML
- Sookmyung Information Security Study
- 백준
- c++
- lob
- hackctf
- BOJ Python
- hackerrank
- XSS Game
- SWEA
- BOJ
- 숙명여자대학교 정보보안 동아리
- Python
- 숙명여자대학교 정보보안동아리
- Today
- Total
혜랑's STORY
[정리] 기계학습(Machine Learning, 머신러닝)은 즐겁다! Part 1 본문
[정리] 기계학습(Machine Learning, 머신러닝)은 즐겁다! Part 1
hyerang0125 2021. 9. 4. 15:05#1. 기계학습(Machine Learning)이란 무엇인가?
- 문제를 해결하기 위한 맞춤 코드(custom code)를 작성하지 않고도 일련의 데이터에 대해 무언가 흥미로운 것을 알려줄 수 있는 일반 알고리즘(generic algorithms)이 있다는 아이디어
ex) 분류(classification) 알고리즘 - 데이터를 서로 다른 그룹으로 분류하는 것을 이용하여 이메일을 스팸과 스팸이 아닌 것으로 분류할 수 있다.
기계학습(Machine Learning)은 이런 종류의 일반 알고리즘(generic algorithms)을 포함하는 포괄적인 용어이다.
#2. 두 종류의 기계학습 알고리즘 - 지도학습(supervised), 비지도학습(unsupervised)
기계학습 알고리즘은 지도학습(supervised learning)과 비지도학습(unsupervised learning)의 두 가지 주요 범주 중 하나로 분류될 수 있다.
1) 지도학습(Supervised Learing)
- 훈련 데이터가 주어지고, 컴퓨터는 답을 찾기 위해 "무언가"를 하여 관계를 알아내도록 함.
ex) 모든 연산 기호가 지워진 수학 시험에 대한 해답을 갖고 있는 것
즉, 지도학습은 정답을 얻기 위해서는 어떤 연산자가 들어가야 하는지를 찾아내는 것과 같다.
2) 비지도 학습(Unsupervised Learning)
- 알려지지 않은 숫자 (예를 들어, 정답)를 예측하려하지 않더라도 여전히 다른 흥미로운 일들을 할 수 있다.
즉, 비지도 학습(Unsupervised Learning)은 정확한 답을 가진 라벨이 붙여진 데이터가 아닌 경우에 사용할 수 있다.
#3. 진짜 기계학습을 통해 주택 가격이 얼마인지 "학습"을 통해 추정할 수 있을까?
- 인간은 대부분의 상황에 대해 이해할 수 있으며, 명시적으로 가르쳐 주지 않아도 상황을 어떻게 해결하면 되는지 배울 수 있다. 이러한 능력을 컴퓨터로 복제하는 것이 Strong AI 연구의 목표이다. 아직까지 그 수준에 도달하지 못하였지만 샘플 데이터를 기반으로 특정 문제를 해결하기위한 방정식을 알아낼 수 있다.
프로그램 작성
기계학습에 대해 잘 모른다면, 아마 다음과 같이 주택 가격을 추정하기위한 기본 규칙들을 작성하고자 할 것이다.
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# 담당 지역내 평균 주택 가격은 평방 피트 당 200 달러이다
price_per_sqft = 200
if neighborhood == "hipsterton":
# 하지만 다른 지역은 조금 더 비싸다
price_per_sqft = 400
elif neighborhood == "skid row":
# 그리고 다른 몇몇 지역은 싸다
price_per_sqft = 100
# 주택의 크기를 기반으로 주택 가격을 추정하는 것으로 시작한다
price = price_per_sqft * sqft
# 이제 침실의 개수로 추정치를 조정한다
if num_of_bedrooms == 0:
# 원룸형 아파트는 가격이 싸다
price = price — 20000
else:
# 일반적으로 많은 침실이 있는 주택이 더 비싸다
price = price + (num_of_bedrooms * 1000)
return price
그러나 가격이 변함에 따라 로직을 유지하기 어렵고, 프로그램 또한 완벽하지 않다. 따라서 컴퓨터가 이 기능을 구현하게 하는 방법을 찾아보자.
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = <컴퓨터, 나 대신 수학식 좀 만들어줘>
return price
이렇게하면 정말 간단하게 원래 함수를 다음과 같이 줄일 수 있다.
ex) 가격(price)이 맛있는 스튜(stew)이며 그 재료는 침실의 개수(number of bedrooms), 평방 피트 면적(square foorage) 및 지역(neighborhood)이다.
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# 이건 한 꼬집 넣고
price += num_of_bedrooms * .841231951398213
# 그리고 저건 한 스픈 정도 넣고
price += sqft * 1231.1231231
# 이건 아마도 한 줌 넣고
price += neighborhood * 2.3242341421
# 그리고 마지막으로, 약간의 소금을 추가
price += 201.23432095
return price
주황색으로 쓰여진 숫자를 주목하자. 이 숫자들이 바로 가중치이다.
최상의 가중치를 알아낼 때 한가지 쉬운 방법은 다음과 같다.
Step 1:
먼저 가중치를 1.0로 하고 시작한다.
def estimate_house_sales_price(num_of_bedrooms, sqft, neighborhood):
price = 0
# 이건 한 꼬집 넣고
price += num_of_bedrooms * 1.0
# 그리고 저건 한 스픈 정도 넣고
price += sqft * 1.0
# 이건 아마도 한 줌 넣고
price += neighborhood * 1.0
# 그리고 마지막으로, 약간의 소금을 추가
price += 1.0
return price
Step 2:
알고있는 모든 주택 데이터를 함수를 통해 실행해보고 각 주택의 정확한 가격과 이 함수가 얼마나 차이가 나는지 살펴보자.
예를 들어, 첫번째 주택은 실제로는 $250,000에 판매되었고, 위 함수는 $178,000에 판매되었다고 추정한것인데, 이 주택 하나만 보더라도 $72,000만큼 차이가 난다.
데이터 500개에 대한 함수가 추정한 값과 실제 가격의 차이를 제곱한 값의 총합은 $86,123,373라고 가정해보자. 이를 통해 함수가 현재 얼마나 "잘못되었는지" 알 수 있다. 이제 500으로 나눠 각 주택별로 얼마나 차이가 나는지 평균값을 구해보자. 이 평균 오류 값을 이 함수의 비용(cost)이라고 한다.
가중치를 잘 조정해서 이 비용을 0으로 만들 수 있다면, 함수는 완벽해지게 된다. 다시 말해서, 모든 경우에 대해서 함수가 입력 데이터를 기반으로 주택 가격을 완벽하게 추정할 수 있다는 것으르 의미한다.
우리의 목표는 다른 가중치를 시도하여 가능한 이 비용을 낮추려는 것이 된다.
Step 3:
가능한 모든 가중치를 조합해서 2단계를 계속 반복한다. 어떤 조합의 가중치든 비용을 0에 가깝게 만들어 주는 것을 사용하면 된다.
이때 시도 할 숫자의 조합은 무한하기 때문에 당연하게도 영원히 걸릴 것이다. 이것을 피하기 위해서, 수학자들은 많은 것을 시도하지 않고도 이러한 가중치에 대한 좋은 값을 빨리 찾을 수 있는 방법을 알아냈다.
먼저, 위 Step 2를 나타내는 간단한 방정식을 작성한다.
똑같은 방정식을 기계 학습의 수학 용어를 사용하여 재작성해 보자.
이 방정식은 현재 설정한 가중치에 대해 우리의 가격 추정 함수가 얼마나 차이 나는지를 나타낸다.
number_of_bedrooms와 sqft에 대한 모든 가능한 가중치 값에 대해 이 비용 방정식을 그래프로 나타내면 다음과 같다.
이 그래프에서 파란색의 가장 낮은 지점이 비용이 가장 낮은 곳이다. 즉, 우리가 이 그래프의 가장 낮은 지점으로 이동할 수 있는 가중치를 찾는다면 답을 찾아내는 것이다.
각 가중치에 대한 비용 함수의 편미분을 계산하고, 각 가중치에서 해당 값을 뺄 수 있다. 이를 통해 우리는 가장 낮은 곳으로 이동하기 위해 움직일 수 있다. 이 작업을 계속하면 궁극적으로 언덕 맨 아래에 도달하여 가장 좋은 가중치를 얻게된다.
이 방법은 함수의 적합한 가중치를 찾는 방법 중에 하나인 배치 기울기 하강(batch gradient descent)에 대한 개괄적인 설명이다.
'무지성 작업실 > WSS 세미나 - Face Recognition' 카테고리의 다른 글
[정리] 기계학습(Machine Learning, 머신러닝)은 즐겁다! Part 4 (0) | 2021.09.08 |
---|---|
[정리] 기계학습(Machine Learning, 머신러닝)은 즐겁다! Part 3 (0) | 2021.09.05 |
[정리] 기계학습(Machine Learning, 머신러닝)은 즐겁다! Part 2 (0) | 2021.09.04 |