라벨이 Math인 게시물 표시

Logistic Regression

이미지
개요 이 글은 Andrew Ng. 교수님 강의 중 "Logistic Regression" 부분을 제 나름의 이해방식으로 정리해 기록하는 글입니다.   Logistic Regression 로지스틱 회귀 는 선형 회귀의 결과를 시그모이드 함수( Sigmoid function) 에 적용하여 확률 값을 출력하는 모델입니다. 이 함수는 입력값이 뭐든 항상 0과 1 사이의 값을 출력하므로, 이진 분류( Classification ) 문제에서 확률 값으로 해석할 수 있습니다.  Source : Andrew Ng. Cousera 따라서 분류문제에서 시그모이드함수의 결과값이 0.5 보다 크거나 같으면 1(참) , 아니면 0(거짓) 으로 생각할 수 있습니다.   여러분이 공무원 시험준비를 한다고 가정해 볼까요. 🤔 공부시간(x0), 시도횟수(x1) 등의 따른 합격여부 데이터(Y)가 있다면, 대략 둘을 합친 값이 3보다 크면 합격, 아니면 불합격하더라 라는 데이터가 있다고 가정해 보겠습니다. (예를 들면 1회 응시, 2시간 이상 공부, 또는 2회 응시 2시간 공부 등) Source : Andrew Ng. Cousera 붉은색 X는 합격, 파란색 O는 불합격이라면,  어렵지 않게 경계선, 결정경계 를 발견할 수 있습니다. (예, 2회 응시하고 2시간 공부하면 합격, 1회 응시하고 1시간 공부하면 불합격) Source : Andrew Ng. Cousera ...

Linear Regression

이미지
개요 Andrew Ng. 교수님 ML ( M achine L earning) 강의 중 Linear Regression 관련 내용을 정리해 두고자 합니다. 

(-1) x (-1) = 1, Why?

이미지
개요 최근 웹에 LaTeX 수식을 적용하다 갑자기 궁금한 점이 생겼습니다. "왜 음수에 음수를 곱하면 양수가 될까?" 라는 생각이 문득 들었습니다.  예전에 고민하고 찾아봤었던 부분인데 기억나지는 않습니다. 😥

순열에 대한 통찰

이미지
개요 안녕하세요. 오늘은 알고리즘문제에 자주 등장하는 순열 문제를 재귀호출 로 풀어보려 합니다. 순열은 조합과 비슷한 점이 많아 문제를 풀다 서로 혼동해 틀리는경우가 많습니다. 백준 ➡️ 단계별로 풀기 ➡️ 백트래킹 단계에 나온 2가지 순열 패턴 개념을 정리하고, 문제를 풀며 살펴보겠습니다. 

좌표들의 Fitting 근사함수 생성앱 만들기

이미지
개요 이번 예제는 마우스로 드래그한 좌표를 기반으로 근사함수를 Fitting 하는 예제 입니다.  차트 위 마우스로 선을 그리면 해당 좌표에 적합한 근사함수를 차수에 따라 만들어주는 기능을 가지고 있습니다.  (함수 항의 0.00 은 소수점 표시가 2자리로 고정 되어 그 이하값이 생략되지만 연산에는 반영)  [DragFit 실행화면] 동영상을 통해 차수가 올라갈 수록 보다 적합 해지는 과정을 확인 할 수 있습니다. 참고로 위 예제는 Numpy의 polyfit () 함수 에 의해 데이터 셋을 근사화 하고 있습니다. 좀 더 들여다 보면 polyfit 함수는 3개의 전달인자 x data, y data, deg(차수) 를 전달하면 최소제곱법 을 사용하여 직선의 기울기 와 절편 을 찾을 수 있습니다. 직선의 기울기와 절편은 데이터 셋과 직선 사이의 오차의 제곱합을 최소화 하는 값입니다. 예를 들면 아래의 데이터 셋을 최소제곱법으로 근사하면 아래와 같습니다. import numpy as np # 주어진 데이터 포인트들 x = np.array([1, 2, 3, 4, 5]) y = np.array([3, 6, 5, 8, 10]) z = np.polyfit(x, y, 1) print(z) # z = [1.6 1.6] # 기울기, 절편 # f(x) = 1.6 * x + 1.6 [최소제곱법 예] Machine Learning 을 공부하다 보면 데이터 셋을 구성하고 위처럼 다항식을 써서 예쁜 모델을 만들면 현재 데이터셋에는 완벽하게 적합하지만 일반화된 다른 모델에는 과적합...

컴퓨터의 수치연산원리, Infix to Postfix에 대한 이해

이미지
개요 안녕하세요. 중위 표기법(infix) 으로 표현된 수식을 후위 표기법(postfix) 로 바꾸는 C++ 계산기입니다.   1. 문자열로 중위표기법 입력 ( A-Z, a-z, 0~9,+,-,*,/,^,(,) )   2. 피연산자 (A-Z, a-z, 0~9) 는 후위식 문자열에 저장   3. 열리는 괄호 '(' 는 Stack에 저장   4. 닫기는 괄호 ')' 만나면 다음 '(' 만나기 전까지 Stack Pop 수행, 후위식 문자열에 저장   5. 연산자는 Stack에 추가 우선순위가 높은 연산자는 Stack Pop 수행, 후위식 문자열에 저장 개발 환경 C++17, Qt Creator 9.0.1, MinGW 11.2.0 64bit Windows 11 Pro   calc.h #ifndef CALC_H #define CALC_H #include <string> class Calc { public: Calc(const std::string& exp); ~Calc(); private: const unsigned int MAX; std::string infix; int priority(char c); public: std::string infixToPostfix(); int calcPostfix(const std::string& exp); }; #endif // CALC_H   calc.cpp #include "calc.h" #include <iostream> #include <cstring> #include <stack> #include <cmath> using namespace std; Calc::Ca...

2D 게임의 기본 벡터 이동, 회전 변환 행렬이해하기

이미지
개요 이번에는 Python + PyQt5를 이용해 마우스를 따라 다니며 회전 하는 물체 를 구현해 보았습니다. 벡터, 회전행렬 연산 을 이용해 구현되어 있으며, 자세한 수식유도과정은 소스코드 설명부에서 진행하고 결과만 먼저 살펴보겠습니다. 전반적인 동작방식은 아래와 같습니다. 1. 마우스 포인터 위치와 사각형의 위치 비교 후 (벡터 차연산) 가속도벡터 를 만들고 이를 속도벡터 에 더해 속도 구하기. (가속도는 속도에 영향) 2. 속도는 사각형의 위치에 영향을 미치므로 속도벡터와 사각형위치벡터를 합연산 . 3. 사각형은 가속하며 마우스위치로 이동. 4. 사각형 이동시 속도 벡터의 각도 를 구해 사각형 4개 꼭지점을 원점을 중심으로 회전. (회전변환 행렬) 5. 회전된 사각형의 4개 꼭지점을 이어서 선을 그리면 사각형 이동시 방향이 전환됨.

PyQt와 피타고라스정리를 이용한 양궁 게임

이미지
개요 이번에 만든 파이썬 예제는 양궁게임(Archery Game) 입니다. 마우스를 클릭하면 움직이는 QProgressBar (수평, 수직) 를 이용해 x, y  좌표를 설정하고 과녁에 맞춘 위치 표시합니다. 심화반 초등학생이 C++, MFC로 만든 양궁게임에서 영감을 얻어 Python과 PyQt5를 이용해 만들해 보았습니다. [양궁게임 실행화면] 설계 과정 1. 윈도우 창의 하단, 우측에 수평, 수직 QProgressBar를 배치 (X, Y 좌표 얻기 용도) 2. QFrame을 이용해 양궁 과녁판 제작 (정사각형) [과녁판] 3. 양궁 과녁 점수판 사각형 영역 얻기 (과녁 사각형을 줄여가며) [과녁 점수판 영역 설정] 4. 사각형에 내접하는 원으로 그리기 [과녁 점수판 원으로 표현] 5. 과녁 색상 입히기 [과녁 완성 모습] 6. 피타고라스의 정리를 이용해 점수 구하기 [화살 좌표로 점수 구하기] 좀 더 세부적인 내용은 소스코드를 보며 알아보겠습니다. 소스코드 2개의 파이썬 파일로 구성 (main.py, archery.py) main.py import sys fro...

PyQt로 구현한 아날로그 시계 2편

이미지
NTP에 대해 설명한 아날로그 시계 1편 에 이어, 실제 Analog Clock을 그리는 2편입니다. Python에서 NTP(Network Time Protocol)을 이용한 시간 얻기 는 1편을 참조하기 바랍니다. 2편에서는 얻어진 시간정보로 아날로그 시계를 그리는 방법 에 대해 살펴보겠습니다. 완성된 모습은 아래와 같습니다. pyinstaller 실행파일 링크 : Analog Clock.exe [Python Analog Clock] 자세한 개요는 1편에 있으므로, 바로 소스코드를 분석해 보겠습니다. 소스 코드 분석 전체 코드는 2개의 파이썬 파일로 구성되어 있으며(main.py, NTP.py), 이번 시간에는 시계를 그려내는 main.py 파일을 살펴보겠습니다. 프로그램을 실행하기 위해서는 1편의 NTP.py 파일과 2편의 main.py 파일 2개가 필요합니다. NTP.py ( 1편 참조 ) main.py 윈도우 창을 구성하고, 시계외형 원, 시간표시, 시, 분, 초침, 날짜 등을 그리는 역할입니다. 세부내용은 아래 main.py 전체 코드 를 살펴보고 설명하겠습니다. import sys import math from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * from NTP import NTP from threading import Thread import time QApplication.setAttribute(Qt.AA_EnableHighDpiScaling, True) class CWidget(QWidget): displayUpdate = pyqtSignal() def __init__(self): super().__init__() ...

이 블로그의 인기 게시물

Qt Designer 설치하기

PyQt5 기반 동영상 플레이어앱 만들기