목록PYTHON (55)
오랑우탄의 반란
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/sMS1y/btsJpEAieAn/temzl3VnpPNXOpg3mUTyxK/img.png)
용어설명ETLETL (추출, 전환, 로드/적재 Extract, Transform, Load) 은 여러 데이터 소스에서 모아진 정보(E)에 대해 품질 개선 및 구조화를 진행한 후(T), 단일 물리적 데이터베이스로 통합해 데이터 웨어하우스, 데이터 레이크, 데이터 마트 형태로 적재(L)시켜 데이터를 전송하는 프로세스 추출: SQL / NoSQL 서버, CRM 및 ERP 시스템, 플랫 파일, 이메일, 웹페이지 등에서 raw데이터 수집 전환: 데이터 필터링/정제/중복 제거/유효성 검사로 1차 처리, 계산/번역/요약 등 일관성 유지, 필요 시 데이터 제거 및 암호화로 보호, 테이블로 포맷팅 (스키마 일치시키기) 데이터웨어하우스수집된 데이터가 ETL을 거쳐 한 곳에 모아진 데이터 (=창고)다량의 데이터를 장기간 보..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/tyiq3/btsJbp2WImn/cMXOInRKUHKkLFehp65JyK/img.png)
불균형 데이터란?불균형 데이터란 목표 변수가 범주형 데이터일 때 범주별 관측치의 개수/비율 차이가 큰 데이터를 뜻합니다. 이때 데이터가 더 많은 쪽을 다수 범주(majority class), 적은 쪽을 소수 범주(minority class)라고 부릅니다. 실무에서 분류 작업을 진행할 때 균형 데이터보다 불균형 데이터를 다뤄야 하는 경우가 많습니다. 신용카드 회사의 정상 거래 대비 사기 거래, 통신회사 기존 유저 대비 이탈(churn) 유저 등 특정 데이터의 비율이 월등히 크거나 작은 경우가 있겠지요. 그럼 이 불균형 데이터가 왜 머신러닝 분류작업 시 문제가 될까요? 불균형 데이터가 왜 문제인가? 머신러닝으로 분류 작업을 진행할 때 프로그램은 자동으로 다수 범주 데이터에 더 큰 비중을 둬서 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/c4CaPH/btsI7NQoK3f/4QoKQ6hqab5AqmapOgHKC0/img.png)
오늘도 오랑이는 문제를 풉니다. 둘만의 암호 풀이 과정alphabet 문자열 생성 후 skip에 포함된 문자 제거s 의 문자에 대해 인덱스 + index 에 해당되는 문자 alphabet에서 꺼내서 출력 우선 s 인덱스 카운트가 원활하게 되도록 alphabet 문자열 생성 후 skip 에 포함된 문자를 제거해주는 작업을 해줍니다.def solution(s, skip, index): answer = '' alphabet = 'abcdefghijklmnopqrstuvwxyz' alphabet = ''.join(sorted(set(alphabet) - set(skip))) skip 이 제거된 알파벳을 출력해보면 아래와 같이 나옵니다. 이제 s 인덱스+index 에 맞는 알파벳을 출력해주는..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bBHPHN/btsI4tSSIyh/ZGIk3VssgPb910nNc5mWiK/img.png)
오늘도 오랑이는 문제를 풉니다. 대충 만든 자판 풀이 과정keymap 글자들의 최소 인덱스+1 목록targets 단어의 각 글자에 대해 위 목록에 있는지 확인있으면 인덱스+1 answer에 append없으면 -1우선 keymap의 인덱스 목록을 저장해줄 딕셔너리를 만듭니다. def solution(keymap, targets): answer = [] key_dict = {} #key_dict에 각 글자별 최소 인덱스값 저장 for i in keymap: for idx, char in enumerate(i): #keymap 단어에서 각 글자의 인덱스와 글자 짝에 대해 if char not in key_dict: key_..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/5W8Ee/btsI25rsUUA/WgZZKYWZ914fN2xIq0IgX0/img.png)
딥러닝 Deep Learning 딥러닝은 머신러닝의 한 분야로, 신경세포 구조를 모방한 인공 신경망(Artificial Neural Networks)을 사용합니다. 딥러닝은 머신러닝과 기본적인 흐름은 같지만 내부 구조가 다르며 자연어 처리와 이미지 처리에 최적화 되어 있는 기법입니다. 둘 다 데이터로부터 가중치를 학습해서 패턴을 인식하고 결정을 내리는 알고리즘 개발과 관련된 AI의 하위 분야입니다. (머신러닝은 데이터 안의 통계적 관계를 찾아내 예측/부류를 함) 인공 신경망(Artificial Neural Networks): 인간의 신경세포를 모방하여 만든 망(Networks)퍼셉트론(Perceptron): 인공 신경망의 가장 작은 단위앞서 선형회귀에서 키와 몸무게를 예제 데이터를 퍼셉트론으로 표현하..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/KXTqf/btsI5B9EfLu/ACv07xbYKb7Utk0RNOQ7p0/img.png)
지금까지 머신러닝의 대표적인 지도학습인 회귀/분류를 살펴봤는데요머신러닝의 다른 종류인 비지도학습과 그 대표적인 예시 K-Means Clustering을 알아보겠습니다. 비지도학습이란? 데이터의 유사성을 기반으로 레이블링해서 답을 지정하는 작업정답이 없는 문제이기 때문에 주관적인 판단이 개입됨예시) 고객 특성에 따른 그룹화 (헤비유저 vs 일반유저) K-Means Clustering 이론K개의 군집 수 설정임의의 중심점 선정해당 중심점과 거리가 가까운 데이터를 그룹화 데이터 그룹의 무게중심으로 중심점 이동중심점을 이동했기 때문에 다시 거리가 가까운 데이터 그룹화 위 과정 3~5번 반복장점- 일반적이고 적용이 쉬움단점- 거리 기반 가까움 측정이기 때문에 차원 많을수록 정확도 떨어짐- 반복 횟수가 많을수록 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/caP3Lk/btsI4YKR2xY/4SoDkkFgrKmWZpR8HBVI9K/img.png)
선형회귀, 로지스틱회귀 외의 대표적인 회귀/분류 모델을 추가적으로 살펴보겠습니다. 의사결정나무 Decision Tree의사결정 규칙을 트리 구조로 나누어 전체 데이터를 n개의 소집다능로 분류하거나 예측을 수행하는 분석법 장점- 쉽고 해석하기 용이- 다중분류, 회귀에 모두 적용 가능- 이상치에 견고하고 데이터 스케일링 불필요 (데이터의 상대적 순위를 고려하기 때문)단점- 과적합 오류: 나무 성장이 너무 많으면 과적합 오류- 불안정성: 훈련데이터에 민감하게 반응해 작은 노이즈에도 나무 구조가 크게 달라짐라이브러리sklearn.tree.DecisionTreeClassifiersklearn.tree.DecisionTreeRegressor namedetails루트노드 root nodeDT 시작점, 1차 분류조..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bfgUlw/btsI5bCZzUw/GMyFIXBfZ5Mb2d1NYqtBKK/img.png)
오늘도 오랑이는 문제를 풉니다. 문자열 나누기 풀이 과정s의 각 글자 i iterate 해서 첫 문자 x와 같은지 비교같으면 same +=1다르면 diff +=1same = diff 이면 answer += 1, same&diff 값 초기화, x=i우선 answer, same, diff 를 모두 0으로 설정해두고 시작합니다.처음에는 answer 와 same 을 1로 두고 시작했었는데, 이럴 경우 첫 번째 x에 대해 중복으로 same이 카운트되기 때문에 틀립니다. 또한 반복문 내에서 처음에는 same==diff 조건을 i==x 이후에 뒀는데 이렇게 되면 초기화가 제대로 이루어지지 않기 때문에 순서를 아래와 같이 해야 합니다. for i in s: if same == diff: answer ..