Post List

레이블이 Data Analysis(Python)인 게시물을 표시합니다. 모든 게시물 표시
레이블이 Data Analysis(Python)인 게시물을 표시합니다. 모든 게시물 표시

2025년 6월 25일 수요일

통계와 머신러닝

Contents

1 개념
2 자료 수집과 준비(Data Collection & Preparation)
3 기술통계(Descriptive Statistics)
4 탐색적 데이터 분석(Exploratory Data Analysis)
5 추정(Estimation)
6 가설 검정(Hypothesis Testing)
7 회귀(Regression)
8 분류(Classification)
9 군집(Clustering)
10 시각화
11 서비스
12 참고자료



작성중...
Python으로 해보려고는 하고 있는데.. 아직까지 R이 훨씬 편한다.. 아.. 하기 싫다..




다음 그림은 개략적인 데이터 분석의 흐름을 보여준다. 통계와 머신 러닝의 경계가 모호하고 분명히 교집합[1]이 있지만,
  • 통계(Statistics): 추정(Estimation), 가설 검증(Hypothesis Testing)
  • 머신 러닝(Machine Learning): 분류(Classification), 군집(Clustering), 회귀(Regression)
과 같이 분류하면 조금은 편할 것 같다.
data_analysis.png


import pandas as pd
import numpy as np

3 기술통계(Descriptive Statistics) #

아.. python으로 해야 하나? 난 SQL과 Excel이 훨씬 편하단 말이야..

목적
  • 데이터의 이해를 위해 시각화하고 요약
  • 데이터의 특성 및 분포 파악

데이터 살펴보기

4 탐색적 데이터 분석(Exploratory Data Analysis) #


5 추정(Estimation) #


6 가설 검정(Hypothesis Testing) #

9 군집(Clustering) #

12 참고자료 #



저도 파이선을 배워볼려고 내가 알고 있는 기술통계부터 시작하려다가 턱 막혀 버렸네요. R에선 한줄이면 되는 것이 파이선에서는...ㅠㅠ
결국 데이터 전처리나 기술통계, 일반 통계 등은 R을 사용하고 머신러닝이나 딥러닝 고급은 파이선을 사용하는 것이 맞지 않을까 싶은 생각이 듭니다. 요즘... -- 김종헌 2021-07-23 21:41:47

2025년 6월 14일 토요일

피식자와 포식자


--출처: 숨겨진 질서 | 존 홀런드 지음 | 김희봉 옮김 | 사이언스북스 | 2001년 10월 30일 출간


  • U: 주어진 영역(예: 1제곱킬로미터)안에 있는 포식자수

  • V: 주어진 영역(예: 1제곱킬로미터)안에 있는 피식자수

단위 시간(예: 1일)안에 포식자와 피식자가 마주치는 횟수는?
  • cUV, c:포시작의 효율

시간에 따른 개체수 변화
  • U(t): 시간 t에서의 포식자수
  • bU(t): b는 포식자의 출생률
  • dU(t): d는 포식자의 사망률

  • V(t): 시간 t에서의 피식자수
  • b'V(t): b'는 피식자의 출생률
  • d'V(t): d'는 피식자의 사망률

한 단위시간이 지났을 때 포식자의 수
  • U(t+1) = U(t) - dU(t) + bU(t)

한 단위시간이 지났을 때 피식자의 수
  • V(t+1) = V(t) - d'V(t) + b'V(t)

피식자와 포식자의 상호작용
  • r[cU(t)V(t)]: 여기서 r은 잡아먹는 피식자(먹이)를 자손으로 전환하는 효율을 나타내는 상수
  • r'[cU(t)V(t)]: 여기서 r'은 피식자가 잡아먹히는 빈도를 가리키는 상수

피식자와 포식자의 상호작용을 고려한 포식자의 수
  • U(t+1) = U(t) - dU(t) + bU(t) + r[cU(t)V(t)]
  • V(t+1) = V(t) - d'V(t) + b'V(t) - r'[cU(t)V(t)]



netlogo sample 모형으로 늑대-양 포식 모형이 있음. 각 개체의 수치 할당하고 시간의 흐름에 따라 어떻게 개체수가 변경되는지 관찰가능. 함 보시압.
http://www.netlogoweb.org/launch#http://www.netlogoweb.org/assets/modelslib/Sample%20Models/Biology/Wolf%20Sheep%20Predation.nlogo -- ㅇㅈㅎ 2017-09-27 17:07:06

오오~ 웹으로도 있었네요~ -- 이재학 2017-09-27 23:50:02


2025년 6월 12일 목요일

수학 기호와 의미

Contents

1 전치 행렬
2 행렬 곱
3 합, 곱
4 수열
5 참고






1 전치 행렬 #

transposed_matrix.png

2 행렬 곱 #

행렬A = l * m 이고, 행렬B = m * n 일 때 행렬 A*B = l * n 행렬이 된다.
$$ \begin{bmatrix}a & b \\c & d \end{bmatrix} \begin{bmatrix}e \\ f \end{bmatrix} $$




다른 수학의 주제와 마찬가지로 행렬도 이게 뭐하는 짓인가 싶다.
내 기준에서는 현실과의 괴리가 참 크다. 행렬의 곱셈도 방법대로 하고 있지만 이게 뭔가 싶다.
이유를 생각해보니 데이터도 있고, 알고리즘(계산법)이 있지만, 컨텍스트가 없기 때문이라 생각된다.
이렇게 이해하자.
matrix.png






3 합, 곱 #

다음과 같이 A라는 집합이 있다.
$$ A = \{x_1,x_2,...,x_n\} $$



각각의 원소들의 합은 다음과 같이 나타낸다.
$$ y = \Sigma_{k=1}^nx_k $$




각각의 원소들의 곱은 다음과 같이 나타낸다. 기하평균 같은 것을 구할 때 쓰인다.
$$ y = \Pi_{k=1}^nx_k $$







4 수열 #

수열은 나열된 숫자들을 말한다.


1,3,5,7,9

이건 홀수열이다.

각각의 숫자는 항이라고 부른다. 1은 1항, 3은 2항, 9는 말항
수열의 n번째 수는 다음과 같이 표현한다.
$$ a_{n} $$



수열 전체를 나타낼 때는 중괄호({})를 사용하여 나타낸다.
$$ \{a_{n}\} $$




점화식은 이웃한 항들의 관계를 식으로 나타낸 것을 말한다.
1,3,5,7,9 는 다음과 같이 나타낸다.
$$ a_{n} = 2n-1 $$




1, 3, 6, 9, 12 는 다음과 같이 나타낸다.
$$ a_{n+1} = a_{n}+3 $$




연립 점화식은 다음과 같이 표현한다.
$$ a_{1}=2, b_{1}= 1 $$ $$ a_{n+1} = 3a_{n} + b_{n} \atopwithdelims \{ . b_{n+1} = a_{n} + 3b_{n} $$















Python - Extremely Randomized Trees

Contents

1 개요
2 참고자료



1 개요 #

random forest 알고리즘에서 cut point도 random으로 하자는 알고리즘이다. random forest보다 성능이 좋다?




Python - 비율 검정

Contents

1 one-sample
2 two-sample



1 one-sample #

A중학교에는 100명 중에 45명이 흡연을 한다. 국가 통계를 보니 중학생 흡연율은 35%라고 한다. 같나?
import numpy as np
from statsmodels.stats.proportion import proportions_ztest

count = np.array([45])
nobs = np.array([100])
val = 0.35

z, p = proportions_ztest(count=count, nobs=nobs, value=val)
print(z)
print(p)



2 two-sample #

복날에 A회사 사람들 300명 중 100명이 삼계탕을 먹었고, B회사 사람들 400명 중 170명이 삼계탕을 먹었다. 비율이 같냐?
import numpy as np
from statsmodels.stats.proportion import proportions_ztest

count = np.array([100, 170])
nobs = np.array([300, 400])

z, p = proportions_ztest(count=count, nobs=nobs, value=0)
print(z)
print(p)

Python - 문자열로 DataFrame 만들기


import pandas as pd
import io

txt = io.StringIO("""
col1	col2
a	1
b	2
c	3
d	4
""")

df = pd.read_csv(txt, sep="\t")
df




Python - DBSCAN(Density-Based spatial clustering of applications with noise)

Contents

1 개요
2 예제
3 참고



1 개요 #

DBSCAN(min_sample, eps)은 군집 알고리즘이고, 매개변수가 2개다.
  • min_sample

  • eps

동작은 다음과 같다.
  1. 랜덤으로 데이터 포인트를 뽑고, 데이터 포인트에서 eps(epsilon)의 거리(기본값은 유클리디안 거리)안에 데이터 포인트를 찾는다.
  2. 만약 찾은 포인트가 min_sample수보다 적으면 noise로 처리하고, min_sample보다 많으면 새로운 클러스터 레이블 할당
  3. 새로운 클러스터에 할당된 포인트들의 eps 거리 안의 모든 이웃을 찾아서 클러스터 레이블이 할당되지 않았다면 현재의 클러스터에 포함시킨다.
  4. 더 이상 데이터 포인가 없으면 클러스터 레이블이 할당되지 않은 데이터 포인트들에 대해 1~3 반복

장점
  • k-means 마냥 k를 결정하지 않아도 된다.
  • 매개변수(min_sample, eps)를 잘 조절하면 다른 클러스터링 방법보다 우수한 결과를 얻을 수 있다.

단점
  • 좀 느리다.
  • 클러스터가 많이 생길 수 있다. --> eps, min_sample을 잘 조절해야 한다.


2 예제 #

#two_moon 데이터 셋
from sklearn.datasets import make_moons
import pandas as pd
X, y = make_moons(n_samples=200, noise=0.05, random_state=0)

df = pd.DataFrame(X, columns=["x", "y"])
df["group"] = y
df[:5]

#import matplotlib.pyplot as plt
#plt.scatter(x=df.x, y=df.y, c=df.group)

#<scatter plot>: 여기부터
import matplotlib.pyplot as plt
plt.scatter(x=df.x, y=df.y, c=df.group)

fig, ax = plt.subplots()
colors = {1:'red', 0:'blue'}

grouped = df.groupby('group')
for key, group in grouped:
    group.plot(ax=ax, kind='scatter', x='x', y='y', label=key, color=colors[key])
plt.show()
#</scatter plot>: 여기까지 한번에 실행


#표준화(평균=0, 분산=1)
from sklearn.preprocessing import StandardScaler
scale = StandardScaler()
scale.fit(df[["x", "y"]])
scaled_X = scale.transform(df[["x", "y"]])

df["scaled_x"] = scaled_X[:,0]
df["scaled_y"] = scaled_X[:,1]

#DBSCAN
from sklearn.cluster import DBSCAN
dbscan = DBSCAN(eps=0.5, min_samples=5) #기본값이다.
cluster = dbscan.fit_predict(scaled_X)
df["cluster"] = cluster

#clustering 결과 확인
plt.scatter(x=df.scaled_x, y=df.scaled_y, c=df.cluster)
plt.xlabel("x")
plt.ylabel("y")

결과
dbscan.png

3 참고 #