본문 바로가기
728x90

AI월드186

발표자료) 악성 PDF 구분을 위한 딥러닝 모델(FINAL PROJECT 2) 안녕하세요 시큐레터와 기업협업 프로젝트를 진행한 박상원입니다. 발표를 시작하겠습니다 간단한 회사소개와 프로젝트, 그리고 결과에 대해 말씀드리겠습니다 시큐레터는 보안전문기업입니다. 악성코드 진단하는 소프트웨어를 개발하고, 분석하는 서비스를 제공하는 기업입니다. 이번 프로젝트는 PDF 문서파일의 악성유무를 판단하는 모델을 만드는 것입니다. 우선 PDF 의 구조를 이해하고 원하는 특징을 추출할줄 알아야 하며, 추출된 특징을 모델에 맞게 전처리 한뒤, 모델링을 진행하는 과정으로 진행하였습니다. PDF의 구조에 대해 간단하게 설명하고 넘어가겠습니다. PDF는 총 4가지 (header, body, refrence table, trailer) 로 구성되어 있으며 그 중 body는 object 들의 집합으로 이루어져 .. 2021. 7. 10.
발표자료) IP log 분석을 통한 위험 예측 (FINAL PROJECT 1) https://github.com/khalidpark/project-LogSecurity khalidpark/project-LogSecurity Contribute to khalidpark/project-LogSecurity development by creating an account on GitHub. github.com 2021. 7. 1.
FINAL PROJECT 2_아이디어(딥러닝활용) 그간의 논문으로부터의 결론은 잘 정제된 (추출된) 데이터를 활용한 머신러닝의 성능이 이미 매우 우수하다. 머신러닝의 한계는 데이터를 기반으로 예측하기 때문에, 데이터를 기반하지않은 새로운 특성이 입력되었을때 그 성능이 떨어질수있다. 이부분을 극복할수있는 분야가 deep learning 이라 생각하며 이번 프로젝트는 딥러닝을 활용해서 프로젝트를 진행해보고자 한다 * data selection 의 범위나 기준은 어떻게 할것인가? (1) 특정 알고리즘을 통해 데이터 셀렉을 하지않고 진행 -> (2) 시간이 너무 오래걸리거나 정확도가 떨어질경우 셀렉션 진행 관련 자료 1 (논문) https://arxiv.org/pdf/2007.12729.pdf 관련 자료 2 (사이트) https://wikidocs.net/22.. 2021. 6. 28.
FINAL PROJECT 2_PDF parser 2번째 단계 적절한 PDF 파서를 찾고, 데이터를 찾는 과정 (0) PyPDF2 https://pythonhosted.org/PyPDF2/ PyPDF2 Documentation — PyPDF2 1.26.0 documentation pythonhosted.org (1) docparser https://docparser.com/ Docparser - Document Parser Software - Extract Data From PDF to Excel, JSON and Webhooks The leading document parser. Extract data from PDF to Excel, JSON or update apps with webhooks via Docparser. docparser.com ht.. 2021. 6. 24.
FINAL PROJECT 2_논문분석 논문리스트 1 : Detection of Malicious PDF based on Document Structure Features and Stream Objects https://www.koreascience.or.kr/article/JAKO201809355933293.pdf 2 : Data Mining Based Strategy for Detecting Malicious PDF Files https://ieeexplore.ieee.org/document/8455965 3 : Hidost: a static machine-learning-based detector of malicious files https://link.springer.com/content/pdf/10.1186/s13635-016-004.. 2021. 6. 18.
발표자료)Flask를 이용한 웹사이트 구축+머신러닝모델_아워홈 식수예측 안녕하세요 아워홈 내부 직원용 웹페이지 구축한 박상원이라고 합니다. 웹페이지의 구성은 크게 3개로 나눌수 있으며, 메인페이지와 머신러닝 모델을 활용한 식수 예측 페이지 그리고 사내 블라인드 게시판 입니다. 사내 블라인드 게시판의 경우 전체 게시글을 볼수있는 페이지와 새 게시글을 작성하는 페이지, 작성된 게시글을 수정하는 총 3페이지로 구성되어 있습니다. 식수예측모델은 '랜덤포레스트 리그레서'를 사용하였으며 데이터 출처는 LH의 구내식당 식수인원 데이터를 활용하였습니다. 메인 페이지입니다. 간단한 회사소개 및 기능안내, 회사 로고로 구성하였습니다. 식수예측 페이지입니다. 입력데이터는 총 3개로 요일, 본사정원수 및 본사 출장자수입니다. 수치를 입력한 뒤 예측결과 버튼을 클릭하면 머신러닝 모델이 예측한 식수.. 2021. 6. 6.
FINAL PROJECT 1_프로젝트 FLOW 1. 프로젝트 FLOW Part 01. 기획서 작성, 데이터셋 리서치 Part 02. 프로젝트 진행 Part 03. 발표 자료 및 영상 준비, 녹화 2. 프로젝트 상세 절차 1) 프로젝트 기획안 작성 1-1) 관심 데이터 선정 Plan A, Plan B 1-2) 데이터 선정 이유 (단순 관심이 아닌 향후 커리어와 꼭 연관시키기) 1-3) 데이터를 이용한 가설 (쓸모있는 가설) 2) Pipeline 구축 및 검증 / 해석 / 재구현 / 고찰 2-1) 데이터 전처리 (EDA / Feature Engineering / 정규화 / 노이즈 제거 / 결측치 제거 or 대체 / 데이터 밸런스) 2-2) 머신러닝 방식 적용 2-3) Chance Level이 넘는 지 확인 (if not) Plan B 적용 2-4) CV.. 2021. 6. 2.
Greedy 탐욕 알고리즘 (다이나믹 알고리즘과의 비교) 미래를 생각하지 않고 각 단계에서 가장 최선의 선택을 하는 기법 이렇게 각 단계에서 최선의 선택을 한 것이 전체적으로도 최선이길 바라는 알고리즘 (결과적으로는 아닐수 있다) Greedy 와 Dynamic와의 비교 최적 부분 구조 문제를 푼다는 점에서 비교 DP 1) 문제를 작은 단위로 분할하여 해결한 후, 해결된 중복문제들의 결과를 기반으로 전체문제를 해결한다. Greedy 1) 각 단계마다 최적해를 찾는 문제로 접근한다. 2) 해결해야 할 전체문제의 갯수를 줄이기위해 개별적으로 문제를 해결해나가는 선택을 한다. 2021. 5. 26.
다이내믹 프로그래밍이란? (2) 상세 보편적 의미는 '문제의 일부분을 풀고 그 결과를 재활용하는 방법' 하나의 문제를 중복되는 서브문제로 나누어 푸는 방법 DP와 분할정복의 차이점 DP는 문제를 분할하는 경우 중복되는 서브문제가 있고, 분할정복은 분할된 서브문제가 독립적 DP는 서브문제가 같은 경우에 메모이제이션을 활용하여 같은 문제에 대해 해결할 수 있고, 분할정복은 서브문제가 다르기 때문에 메모이제이션을 활용하지 않는다. 다이나믹 프로그래밍 - (1) 중복된(반복되는) 서브문제 (Overlapping Subproblems) : 메인과 서브문제를 같은 방법(반복)으로 해결할 수 있어야 한다.(문제해결관점) - (2) 최적 부분 구조 (Optimal Substructure) : 메인문제 해결방법을 서브문제에서 구하여 재사용하는 구조여야 한다.. 2021. 5. 26.
다이나믹 프로그래밍이란? (핵심 간단정리) 재귀적으로 생각하기 + 불필요한 계산 줄이기 출처 : https://www.youtube.com/watch?v=2RwlzBDhGh4&feature=youtu.be 2021. 5. 26.
BFS, DFS 정의 _ 순회 탐색 알고리즘 BFS(breadth-first search) 너비우선탐색 BFS는 큐, 딕셔너리, 리스트, 내장함수 개념을 활용 bfs_graph = { # 그래프를 인접리스트로 표현 1: [2,3,4], 2: [1,5,6], 3: [1,6], 4: [1], 5: [6,7], 6: [5], 7: [6], } def bfs_queue(start_node): bfs_list = [start_node] queue = [start_node] while queue:#외부반복문 node = queue.pop(0) for i in bfs_graph[node]: #내부반복문 if i not in bfs_list: bfs_list.append(i) queue.append(i) return bfs_list bfs_queue(2) # 1.. 2021. 5. 25.
순회(traversal) (1) 개념 그래프 또는 트리처럼 연결된 구조에서 노드를 한 번씩 탐색, 방문하는 개념 순회의 목적은 모든 노드 또는 특정 노드를 방문하는 방법 (2) 방법 전위순회(preorder traverse) : 루트를 먼저 방문 중위순회(inorder traverse) : 왼쪽 서브트리를 방문 후 루트방문 후위순회(postorder traverse) : 순서대로 서브트리(왼쪽->오른쪽)를 모두 방문 후 루트를 방문 2021. 5. 24.
자료구조와 그래프 , data structure for design and graph (1) 그래프 : 자료구조 디자인의 한 방법 : 기본적으로 위 그림처럼 vert(노드 또는 정점)와 edge(간선)으로 연결 (2) 그래프와 트리와의 차이점 그래프는 "노드간의 관계"를 나타내며 , 트리는 "노드간의 계층"을 표현한다. (3) 그래프의 유형 - 방향성과 무방향성 (directed & undirected) - 순환과 비순환 (cyclic & Acyclic) (4) 가중그래프 : 경로의 총 가중치가 높을수록 경로이동시간(비용)이 길어진다 (5) 그래프 표현방법 - 인접리스트(adjacency lists)와 인접행렬(adjacency matrices) class Graph: def __init__(self): self.vertices = { "A": {"B"}, # 여기서 {"B"}가 set의.. 2021. 5. 24.
해시, 해시테이블, 해시충돌이란? 해시테이블이란? : 키를 활용하여 값에 직접 접근이 가능한 구조 : (파이썬의 딕셔너리는 내부적으로 해시테이블 구조) 해시(Hash)는 해시 함수를 통해 나온 값이다. 해시테이블은 키를 빠르게 저장 및 검색할 수 있는 테이블형태의 자료구조이다. 해시함수는 여러 키를 분할하기 위해 키를 해시값(정수값)으로 매칭시키는 역할을 한다. 해싱(Hashing)은 쉽게 말해서 다 흩뜨려놓고, 키와 매칭되는 값을 검색하는 과정이다 해싱의 장점 : 데이터 양에 영향을 덜 받으며 성능이 빠르다.(키를 통해 값을 검색한다.) 해시함수 해시충돌 해시충돌이 발생하는 이유는? 가능한 모든 데이터를 알고 있지 않으면 완벽한 해시 함수를 작성하는 것은 불가능 해시충돌은 키가 들어갈 자리(버킷)가 없는 경우에 발생 충돌이 적은 해시함.. 2021. 5. 21.
데이터 엔지니어 [코드내용] (1) 데이터셋 불러오기 (pd.read_csv , df.shape , dataframe column 지정) (2) EDA (Uni - Non Graphic , Uni - Graphic , Multi Uni - Non Graphic , Multi Uni - Graphic) (3) EDA이후 (데이터 전처리) (4) Feature engineering (5) String & Type case (df.apply) (6) Data Manipulation (concat , merge , isin , group by) (7) Tidy data (melt , pivot_table , wide -> tidy , tidy -> wide) https://github.com/khalidpark/data_eng.. 2021. 5. 19.
머신러닝 목차 1-1. Simple Regression 1-2. Multiple Regression 1-3. Ridge Regression 1-4. Logistic Regresssion 2-1. Decision Trees 2-2. Random Forests 2-3. Evaluation Metrics 평가지표 2-4. Model Selection 3-1. Choose your ML problems 3-2. Data Wrangling 3-3. 특성중요도 계산 3-4. Interpreting ML Model Regression 1-1. Simple Regression (1) 기준모델 : 예측 모델을 만들기 전에 가장 간단하면서도 직관적이면서 최소한의 성능을 나타내는 기준이 되는 모델 - 분류문제: 타겟의 최빈 클래스 .. 2021. 5. 19.
메모이제이션(Memoization) 분할된 서브문제를 해결하기 위해, 반복되는 해결법을 재사용하는 기법 미리 계산한 값을 재사용하므로 프로그램 실행속도를 빠르게 해준다 방법 : 반복되는 계산 결과를 특정 변수에 저장 ################################ memoization을 사용하지 않은 재귀의 경우 ################################ def recursive_factorial(n): # 최상위 호출 if n is 0: return 1 else: return n * recursive_factorial(n - 1) # 함수 내부 print(recursive_factorial(10)) print(recursive_factorial(4)) # 해석 n=5 를 호출, 수행한 뒤 n=4를 호출할때 fa.. 2021. 5. 18.
분할정복(Divide and conquer),퀵정렬,병합정렬과 재귀(Recursion) 분할정복과 재귀 분할정복 : 복잡하거나 큰 문제를 여러 개(병렬적으로)로 나눠서 푸는 방법 분할정복 방법 진행중에 재귀가 사용될 수 있다. 분할정복과 재귀 코드비교 # 재귀 : 1부터 10까지의 합 def func(num): if num < 1: return 0 else: return num + func(num-1) func(10) ########################## # 분할정복 : 1부터 10까지의 합 def func(num): if num == 1: return 1 if num % 2 == 1: return func(num - 1) + num else: return func(num / 2) * 2 + (num / 2) * (num / 2) func(10) 퀵정렬과 병합정렬의 비교 퀵정렬 .. 2021. 5. 18.
선택정렬, 삽입정렬, 버블정렬 선택정렬 왼쪽부터 가장 작은 노드와 비교하면서 교환 즉, 최소노드 선택 -> 왼쪽부터 비교 -> 교환 삽입정렬 아직 정렬되지 않은 특정 노드와 정렬된 노드들의 값을 비교하고 , 값이 더 큰 것의 인덱스보다 작은 인덱스에 삽입하며 정렬하는 알고리즘 선택정렬과 비슷하지만, 값이 가장 작은 원소를 선택하지는 않는다. 삽입정렬은 소량의 데이터를 정렬하기위한 효율적인 알고리즘 버블정렬 서로 이웃한 두 원소의 크기를 비교한 결과에 따라 교환을 반복하는 알고리즘 (단순 교환 정렬이라고도 함) 버블정렬은 옆에 있는 이웃노드만 교환하므로 안정적 # 버블정렬 소스코드 def bubble_sort(li): length = len(li) - 1 >> for i in range(length): # 외부 반복문(아래 그림에서 전.. 2021. 5. 17.
탐색 알고리즘(선형검색, 이진검색) 선형 검색 선형 검색은 기본적인 검색 알고리즘으로 한 번에 하나씩 모두 검색 처음부터 하나씩 체크하면서 검색하는 가장 기본적인 검색 def linear_search(linear_arr, search_number): for i in range(len(linear_arr)): if linear_arr[i] == search_number: return i linear_arr = [5,22,87,1,3] search_number = 1 print("search index : ",linear_search(linear_arr, search_number)) 이진 검색 숫자를 반으로 줄이면서 검색을 진행하기 때문에 선형보다 속도가 더 빠르다. 이진 검색 방법은 데이터가 이미 정렬된 경우에만 작동 def binary_s.. 2021. 5. 17.
728x90