본문 바로가기

Python47

다중공산성 해결 방법 전 포스트에서 다중공산성을 확인하는 3가지 방법에 대해 설명했다. scatterplot, heatmap, VIF 이렇게 총 3가지가 있다. 이번엔 다중공산성 해결 방법을 알아본다. 크게 3가지로 나뉘는데, 변수 정규화 변수 제거 PCA(주성분 분석) 먼저 변수 정규화 변수 정규화는 이전 수치형 데이터 정규화 포스트에서 다루었다. https://lucian-blog.tistory.com/48?category=1002577 보통 의사결정나무, 랜덤포레스트와 같이 트리기반 모델은 대소 비교를 통해 구분한다. 그렇기에 숫자와 단위에 크게 영향을 받지 않는다. 하지만 로지스틱 회귀, Lasso 등 평활함수모델(평활=smooth) 선형?함수같은 느낌인 것 같다. 여튼 이 모델들에는 숫자의 크기와 단위에 영향을 많이.. 2021. 12. 29.
다중공산성 다중공산성 상관관계가 높은 독립변수들이 다중으로 모델에 들어가 있을 때 발생한다. 즉 독립변수들이 강한 선형관계가 있을 때 발생하는 것이다. 다중공산성이 높다=같은 변수를 두번 넣은 것과 같다. 보통 다중 회귀방정식에서 다중공산성 문제가 발생한다. 다중회귀방정식을 변동성으로 표현한 그림이다. y=a1x1+a2x2+a3x3+c y : 종속변수 x1, x2, x3 : 독립변수 매출(Y)를 설명하는 독립변수들의 변동성들이 겹쳐지는 것을 볼 수 있는데, 다중공산성이 낮을 때는 이렇게 겹쳐져 있지 않고 매출(Y)의 변동성 안에서 고루게 분포되어 있다. 하지만 이처럼 변동성들이 겹쳐지면 이 종속변수를 설명하는 부분이 겹쳐지게 되므로 같은 변수를 두번 쓴 것과 같은 현상이 발생한다는 것이다. 이러면 모델의 신뢰도가 .. 2021. 12. 17.
클래스와 상속 클래스 클래스는 간단하다. 현실에 있는 사물을 추상화를 통해 프로그래밍한 것이다. 즉 현실에 사람이 있다면 사람의 전체적인 특징을 변수, 함수로 만들어 함께 넣어놓은 것이다. 클래스끼리는 상속도 가능해서 상속받은 클래스의 변수와 함수를 그대로 가져다 쓸 수 있다. 이렇게 클래스화 시키면 프로그램을 계층적으로 구성을 가능하게 한다. 또한 불필요한 소스코드 작성을 줄일 수 있다는 장점을 가지고 있다. 클래스에서 변수는 멤버, 함수는 그대로 함수 또는 메서드라고 불른다. # class 선언 class Human : # 클래스의 생성자. 클래스라면 누구나 가지고 있는 생성자 # 생성자는 함수형태로 이름이 __init__으로 약속되어 있다. # 또한 클래스 내부의 함수들은 매개변수로 self를 무조건 넣는다. d.. 2021. 12. 17.
Bayesian Optimization 한글로 베이지안 최적화 이다. 어렵다... 기본틀만 이해하자. 하이퍼 파라미터의 다양한 튜닝 방법 중 grid optimization, random optimization 다음으로 bayesian optimization이다. 저번 포스트인 랜덤포레스트에서 그리드 최적화로 적절한 하이퍼 파라미터를 찾은적이 있다. https://lucian-blog.tistory.com/44?category=1002577 랜덤포레스트(RandomForestRegressor) 앙상블 기법 - 배깅, 부스팅, 랜덤포레스트 등의 기법 중 랜덤포레스트에 대해 알아보자. 랜덤포레스트는 의사결정나무를 여러개를 모아다 합쳐놓은 것이다. 일종의 배깅인데, 각 의사결정나무 lucian-blog.tistory.com 그리드 최적화는 내가 설.. 2021. 12. 16.
Hold-out, 교차검증(K-Flod), Stratified K-fold 먼저 Hold out에 대해 알아보자. Hold-out 전체(train) 데이터를 훈련과 검증 데이터로 나뉘는 것을 말한다.(여기서 전체 데이터셋은 train과 test 데이터 중 train만 말함. - 즉 데이터가 train=(훈련, 검증), test=(테스트)로 나뉜다는 뜻) 기본적으로 8:2, 7:3으로 나눠 훈련(train)데이터는 모델을 훈련 시킬 때, 검증(valid) 데이터는 모델이 얼마나 잘 훈련되었는지 확인할 때 쓴다. 이렇게 하면 모델의 예측성능을 측정할 수 있다.이 모델이 과대적합이 일어났는지 제대로 훈련되고 좋은 성과를 냈는지 test 데이터를 넣기 전에 알 수 있기 때문에 나뉜다. 하지만 이 Hold-out방식은 데이터 자원을 낭비한다는 문제가 있다. 왜냐면 검증으로 쓸 데이터는 .. 2021. 12. 9.
Word2Vec 앞서 말한 희소표현에선 단어의 유사도를 계산할 수 없었다. 모든 단어를 길게 늘어뜰인 벡터로 고차원의 벡터로 만들 뿐 단어와 단어가 어떻게 연결되어 있는지 파악할 수 없다. 그렇기에 단어간의 유사성을 계산하고자 나온 것이 분산표현이다. 분산 표현(Distributed Representation) 분산 표현은 분포가설의 가정하에 만들어진 표현방법이라 한다. 비슷한 위치에 등장하는 단어는 비슷한 의미들을 가진다. 라는 가정이라는데, 간단히 말해 강아지하면 떠오르는게 귀엽다, 사랑스럽다 일 것이다. 이 강아지는 귀엽다와 사랑스럽다와 비슷한 의미를 가진다고 볼 수 있다. 즉 강아지라는 단어가 있을 때, 귀엽다와 사랑스럽다라는 단어의 분포가 많을 것이므로 이는 같은 의미라고 여겨지는 것 같다. 이러면 분포를 표현.. 2021. 11. 22.
[백준 17298번] 오큰수 문제 크기가 N인 수열 A = A1, A2, ..., AN이 있다. 수열의 각 원소 Ai에 대해서 오큰수 NGE(i)를 구하려고 한다. Ai의 오큰수는 오른쪽에 있으면서 Ai보다 큰 수 중에서 가장 왼쪽에 있는 수를 의미한다. 그러한 수가 없는 경우에 오큰수는 -1이다. 예를 들어, A = [3, 5, 2, 7]인 경우 NGE(1) = 5, NGE(2) = 7, NGE(3) = 7, NGE(4) = -1이다. A = [9, 5, 4, 8]인 경우에는 NGE(1) = -1, NGE(2) = 8, NGE(3) = 8, NGE(4) = -1이다. 입력 첫째 줄에 수열 A의 크기 N (1 ≤ N ≤ 1,000,000)이 주어진다. 둘째 줄에 수열 A의 원소 A1, A2, ..., AN (1 ≤ Ai ≤ 1,00.. 2021. 11. 16.
[백준 2004번] 조합 0의 개수 in python 문제 $n \choose m$의 끝자리 $0$의 개수를 출력하는 프로그램을 작성하시오. 입력 첫째 줄에 정수 $n$, $m$ ($0 \le m \le n \le 2,000,000,000$, $n \ne 0$)이 들어온다. 출력 첫째 줄에 $n \choose m$의 끝자리 $0$의 개수를 출력한다. 예제 입력 1 25 12 예제 출력 1 2 이전에 https://lucian-blog.tistory.com/84 팩토리얼 0의 개수를 구하는 문제를 풀었다. 이것도 비슷하면서 조금은 다른 문제이다. 우선 조합식을 보자. $_{n}C_{r}=\frac{n!}{(n-m)!r!}$ 이제 예제를 봐야한다. n=10, m=5로 놓는다. 그러면 $_{10}C_{5}=\frac{10!}{(10-5)!5!} = \frac{3.. 2021. 11. 16.
[백준 1676번] (factorial)팩토리얼 0의 개수 in python 문제 N!에서 뒤에서부터 처음 0이 아닌 숫자가 나올 때까지 0의 개수를 구하는 프로그램을 작성하시오. 입력 첫째 줄에 N이 주어진다. (0 ≤ N ≤ 500) 출력 첫째 줄에 구한 0의 개수를 출력한다. 예제 입력 1 10 예제 출력 1 2 예제 입력 2 3 예제 출력 2 0 처음에 어떤 의미의 문제인가 이해를 하지 못했다. 그러다 계산기로 10!을 쳐보고 이해를 했다. 5!=120 10!=3,628,800 즉 뒤에 있는 0의 갯수를 말하는 것이였다. 10!은 5의 배수인 5와 10이 두개이므로 0이 2개가 나온다. 15!는 5,10,15 3개이므로 0이 3개가 나온다. 그렇기에 5만 나올때마다 cnt+=1해주면 될줄 알았다.... n=int(input()) cnt=0 for i in range(0,n.. 2021. 11. 16.