Notice
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 통계 #ROC #TPR #FPR #TNR #이진분류 #Accuracy #Recall
- 패스트 캠퍼스 #자율주행 #비전
- 파이선 행
- 파이썬 채팅
- 파이썬 열
- 스트림 암호 one-time-pad 공격#보안#암호
- 리눅스#모의해킹#리눅스명령어#head 명령어
- 파이썬 예시
- QGC#QGrouncControl#GLIB오류
- ROS #Robotics #ROS기초
- PDF 개행문자
- 파이썬#파이썬경로#파이썬폴더#파이썬디렉토리
- 크롬오류#크롬검색어자동완성끄기#검색어자동완성오류#검색어자동완성 제거#검색어 노란선#검색어반복입력
- 파이썬 #
- ROS #spin() #spinOnce() #ROS기초
- 파이썬 파일 전송
- 파이썬 음성파일 텍스트 변환
- 파이썬
- pdf 번역
- 파이썬 프로젝트
- 파이썬 유튜브
- 파이썬 텍스트 변환 #파이썬 공부
- 파이썬 엑셀 파일 읽고 쓰기
- 파이썬 음성인식
- 파이썬#subprocess#communicate()
- 파파고 꿀팁
- 리눅스기초#리눅스명령어#리눅스 tail#tail#모의해킹 리눅스
- 파이썬 #파이썬프로젝트 #파이썬 예시 #파이썬 파일경로 #파이썬 자동화
- 파파고 번역
- 논문번역 꿀팁
Recent Comments
Archives
개발자비행일지
파이썬, 몬테카를로 시뮬레이션 본문
드론 관련하여 칼만필터 논문을 보던 중 몬테카를로 시뮬레이션을 사용하여, 칼만필터의 경향성이 이러함을 보였다.
라는 문구가 있어서 몬테카를로가 무엇인지에 대해 개인학습 목적을 가지고 정리하고자 한다.
몬테카를로 시뮬레이션은 프로젝트의 정량적 리스크 분석에 사용되는 리스크 관리 기법이다.
예를들어서 프로젝트의 목표가 있을 때, 목표 달성의 확률이 얼마나 되는지 확률적으로 계산해 주는 시뮬레이션을 말한다.
표준분포를 따르는 값을 무작위로 추출해서 결정하고, 이를 반복하여서 확률을 계산하는 방식을 말한다.
예제를 통해 이해해 보자.
프로젝트 일정이 언제 끝나는지 분석해 보자.
위와 같을 경우 이 프로젝트는 23~42일의 기간이 소요된다.
몬테카를로 방식으로 이를 시뮬레이션 하기 위해서는
1회 : 12 + 6 + 9 = 27
2회 : 17 + 8 + 14 = 39
3회 : 13 + 7 + 10 = 30
이렇게 1000 회를 반복한다.
이제 1000번의 수행 중에 각각의 합산 값이 몇번 씩 발생했는지를 기록한다.
이 데이터를 가지고 누적 그래프를 만들면, 해당 날짜 몇일 내에 끝나는 지를 확률로써 말할 수 있는 것이다.
위에서 25일 이내 끝나는 확률을 10+20+30 / 1000 -> 6%의 확률을 가진다.
자 그럼 이런 몬테카를로를 파이썬을 이용해서 한번 배워보도록 하자.
원의 넓이를 추정해 보도록하자.
몬테카를로 방법의 가장 간단한 예시로는 원주율(π)의 값을 추정하는 것이다.
넓이가 1인 정사각형을 생각하자. 정사각형의 한 꼭지점을 중심으로 반지름이 1인 사분원을 정사각형 안에 그린다. 그러면 사분원이 차지하는 넓이는 π/4가 될 것이다. 이제, 0 <= x <= 1인 x를 임의로 가져오고, 독립적으로 0 <= y <= 1인 y를 임의로 가져온 후, x^2 + y^2 <= 1일 확률은 사분원이 차지하는 넓이와 같은 값인 π/4가 된다.
이 과정을 여러 번 수행하는 알고리즘을 작성하고, 원주율의 값을 추정해 보자.
import numpy as np
import matplotlib.pyplot as plt
import math
s = 1000
xs = np.random.random_sample(s)*2-1
#[0,2)-> [-1,1) 사이의 임의의 실수
ys = np.random.random_sample(s)*2-1
#[0,2) -> [-1,1)
cnt = 0
plt.figure(figsize=(5, 5))
for i in range(0, s):
x, y = xs[i], ys[i]
if x**2 + y**2 <=1:
cnt+=1
plt.scatter(x, y, c='blue', alpha=0.2)
else:
plt.scatter(x, y, c='red', alpha=0.2)
print((cnt/s)*4)
#x,y좌표가 [-1,1],[-1,1]인 직사각형의 넓이 4의 안에서 cnt/s 만큼의 비율을 가지기 때문에 비율 *면적을 곱해줘야 한다..
print(math.pi)
plt.show()
'▶ Python' 카테고리의 다른 글
Python isinstance() 파이썬 자료형 확인 (0) | 2020.07.22 |
---|---|
파이썬 OS 모듈, 디렉토리 위치 얻기 (0) | 2020.07.15 |
Python @연산자, 벡터 행렬 곱연산 (0) | 2020.07.14 |
파이썬 딕셔너리 (0) | 2020.07.10 |
파이썬 os모듈 사용법 (0) | 2020.07.10 |