[회고] 신입 iOS 개발자가 되기까지 feat. 카카오 자세히보기
반응형

분류 전체보기 495

[scikit-learn 라이브러리] LogisticRegression (로지스틱 회귀)

기본 이론 간단하면서도 파라미터의 수가 적어서 빠른 예측이 가능하다. 따라서 다른 알고리즘과의 비교 기준점으로 사용되기도 한다. 주로 $p = {1 \over 1+e^{−z}}$ 형태의 시그모이드 함수를 사용한다. z는 가중치 계산(선형)의 결과이다. 시그모이드 함수는 0~1까지의 결과만을 가지기 때문에 임의의 수에 대한 확률값을 도출해내기 적당하다. 아웃풋을 확률값으로 만들어서 이를 기반으로 데이터를 그룹으로 나눌 수 있다. 시그모이드 함수 # 가중치 이동 # W(a)값이 작을때 -> 클 때 def logreg(z): return 1 / (1 + np.exp(-z)) W_list = [0.3, 0.5, 1] b_list = [0] xx = np.linspace(-10, 10, 100) for W in ..

[알고리즘 연습] 최대 수익 구하기

최대 수익 구하기 인덱스별로 주식의 가격이 적혀있는 리스트가 있다. 해당 리스트에서 주식을 사고 팔았을 때 얻을 수 있는 최대 수익은 얼마인지 구해라 풀이 def maximizeProfit(nums): max_profit = 0 min_price = nums[0] for now in nums: profit = now - min_price if profit > max_profit: max_profit = profit if min_price > now: min_price = now return max_profit def main(): print(maximizeProfit([1,2,3,4,5,6,7])) # 6 print(maximizeProfit([7,6,5,4,3,2,1])) # 0 print(maximi..

[알고리즘 연습] 마지막으로 남는 카드

마지막으로 남는 카드 1~n순서로 쌓여있는 카드뭉치가 존재한다. (맨 앞이 1) 앞부터 제일 앞카드는 버리고, 그 다음카드는 제일 뒤로 옮긴다. 해당 과정을 반복한다. 제일 마지막에 남는 카드 1장의 숫자를 리턴해라. 풀이 from collections import deque def deque_process(n): my_deque = deque([i for i in range(1, n + 1)]) while(len(my_deque) != 1): my_deque.popleft() my_deque.rotate(-1) return my_deque[0] 가장 기본에 충실한 방법이다. 카드뭉치를 deque로 만들고, 이를 pop하고 rotate하기를 카드뭉치 사이즈가 1이 될 때까지 반복한다. 그리고 마지막에 남..

[scikit-learn 라이브러리] SGDClassifier (선형분류)

계산값을 기반으로 계산값이 0보다 작으면 -1, 0보다 크면 1로 분류한다. 이진 선형 분류기는 선, 평면, 초평면을 이용해 2개의 클래스를 구분하는 분류기이다. SGDClassifier SGDClassifier(alpha, average, class_weight, epsilon, eta0, fit_intercept, l1_ratio, learning_rat, loss, max_iter, n_iter, n_jobs, penalty, power_t, random_state, shuffle, tol, verbose, warm_start) 확률적 경사하강법(SGD, Stochastic Gradient Descent)을 이용하여 선형모델을 구현 lossstr : 손실함수 (default='hinge') pena..

[scikit-learn 라이브러리] PolynomialFeatures (다항회귀)

다항회귀 import numpy as np import matplotlib.pyplot as plt %matplotlib inline n = 100 x = 6 * np.random.rand(n, 1) - 3 y = 0.5 * x**2 + x + 2 + np.random.rand(n, 1) plt.scatter(x, y, s=5) 위와 같은 데이터는 데이터의 분포가 곡선으로 나타나기 때문에 일반적인 선형회귀로 해결할 수 없다. (비선형) 따라서 다항 회귀를 사용한다. 다항회귀란 위와 같이 데이터들간의 형태가 비선형 일때 데이터에 각 특성의 제곱을 추가해주어서 특성이 추가된 비선형 데이터를 선형 회귀 모델로 훈련시키는 방법이다. 기본 과정 from sklearn.preprocessing import Poly..

워드 임베딩 - GloVe 기초활용

기존방법의 문제점 Word2Vec은 중심단어로 주변단어를 예측하거나 주변단어로 중심단어를 예측하는 과정에서 단어를 벡터로 임베딩했다. 하지만 이는 말뭉치의 전체적인 통계정보를 담지 못한다. LSA는 단어의 빈도수를 카운트해 이를 기반으로 단어를 임베딩한다. 이는 유사 단어 관계의 의미 유추 등에서 성능이 떨어진다. GloVe 두 단어 벡터의 내적이 말뭉치 전체에서의 동시 등장확률 로그값이 되도록 목적함수를 정의했다. '임베딩된 단어벡터 간 유사도 측정을 수월하게 수행하고 동시에 말뭉치 전체의 통계 정보를 잘 반영해보자'가 Glove가 지향하는 핵심 목표라고 할 수 있다. 위 표는 Glove 연구진이 예시로 든 것이다. 각 단어의 관계성에 따라 수치를 나타내고, P(solid |ice)/P(solid|st..

단층 퍼셉트론 - 이진판단 구현 확장

https://inuplace.tistory.com/510?category=912534 단층 퍼셉트론 - 이진판단 구현 https://inuplace.tistory.com/460?category=912534 단층 퍼셉트론 - 회귀분석 구현 데이터를 기반으로 전복의 고리수를 예측하는 단층 퍼셉트론을 구현해보자. 주어진 데이터는 'Sex', 'Length', 'Diameter', 'He.. inuplace.tistory.com 위 링크에서 구현한 코드를 실행해보면 테스트 데이터에 대해 꽤나 좋은 정확도를 얻게 된다. (97% 상회) 하지만 이는 전체 데이터셋의 90%가 일반 별이고 10%가 펄서이기 때문이다. (따라서 테스트 데이터셋도 비슷한 비율을 가질 것이다.) 이런 경우 일반적 데이터에서 모델을 사용하..

단층 퍼셉트론 - 이진판단 구현

https://inuplace.tistory.com/460?category=912534 단층 퍼셉트론 - 회귀분석 구현 데이터를 기반으로 전복의 고리수를 예측하는 단층 퍼셉트론을 구현해보자. 주어진 데이터는 'Sex', 'Length', 'Diameter', 'Height', 'Whole weight', 'Shucked weight', 'Viscera weight', 'Shell weight', 그리.. inuplace.tistory.com 이전에 작성한 코드 중 일부를 재활용한다. 별 데이터를 분석해 일반 별과 펄서를 구별한다. 수업에 사용된 코드를 분석한 자료입니다. 코드 재활용 %run ../abalone.ipynb 회귀분석 구현시 작성되었던 함수 일부를 활용하기 위해 해당 파일명을 run하여 코드..

워드임베딩 - Word2Vec 기초활용

희소표현과 밀집표현 희소 표현 : 벡터 혹은 행렬의 값 대부분이 0으로 표현되는 방법이다. 단어의 개수가 늘어나면 차원이 한없이 커진다는 단점이 있다. 따라서 공간적 낭비가 있다. (ex. 원-핫 벡터) 밀집 표현 : 벡터의 차원을 단어 집합의 크기로 상정하지 않는다. 사용자가 설정한 값으로 모든 단어의 벡터 표현의 차원을 맞춘다. 또한 이 과정에서 0과 1이 아닌 실수값을 가지게 된다. 워드 임베딩 단어를 밀집 벡터의 형태로 표현하는 방법 LSA, Word2Vec, FastTest, Glove 등의 방법이 있다. Word2Vec 분산 표현 : 단어의 의미를 다차원 공간에 벡터화하는 것. 비슷한 위치의 단어는 비슷한 의미를 가진다는 가정하에 만들어진 표현 방법이다. 원-핫 벡터와 같은 희소 표현이 고차원..

[알고리즘 연습] 트리 경로의 합

트리 경로의 합 루트 노드와 임의의 수 'targetSum'을 주어, 루트 노드부터 리프 노드까지 가는 경로의 합 중 targetSum과 일치하는 값이 있는지 확인한다. 하나라도 일치하면 True를 리턴하고, 일치하는 수가 없으면 False를 리턴한다. 풀이 class Node(): def __init__(self, val): self.val = val self.left = None self.right = None def path_sum(node, targetSum): def path_sum(now_node, now_sum): if (now_node.left == None) and (now_node.right == None): now_sum += now_node.val return [now_sum] el..

반응형