data analysis & visualization

우리는 범주로 구성되어 있는 자료를 분석할 때 흔히 더미화, 원핫인코딩 등을 통해 자료를 변화시킨다. 과연 이러한 더미화는 모델링에서 어떤 영향을 미칠까? 

 

회귀분석에서 주로 얘기되는 더미화는 해당 범주별로 가중치를 다르게 주려고 사용한다. 예를 들어 회귀분석을 통해 몸무게를 예측할 때 성별이라는 변수가 고려되었다고 한다면, 성별이 남자일 때 beta0에 남성의 weight만큼 더해지고, 성별이 여성일 때 beta0에 여성의 weight 만큼 더해져 좀 더 정교하게 예측하게 된다. 

 

Tree기반 모델에서는 과연 더미화는 어떤 역할을 할까? Tree 기반 모델에서는 더미화가 오히려 성능에 악영향을 주는경우가 종종 발생한다. 트리모델에서는 범주별로 이진화를 하게 되는데 만약 더미화를 하게되면 범주별로 변수처럼 인식하게 되므로 True, False 단  두가지로 분류되게 된다. 즉, 이 경우 더미화를 하게됨으로써 덜 정교하게 예측하게 된다. 

 

물론 절대적인 얘기는 아니다. 다만 모델링에서 더미화를 할지 말지는 모델에 따라 고민이 필요하다는 것이다. 

'머신러닝' 카테고리의 다른 글

calibration Curve  (0) 2020.08.19
보루타(boruta algorithm)  (0) 2020.08.09
Dynamic Time Warping(동적 시간 접합)  (0) 2020.07.09
성능평가지표  (0) 2020.04.26
과적합이 좋지 못한 이유?  (0) 2020.01.20

pypy

python2020. 8. 31. 23:43

[numpy install]

pypy3 -m pip install --extra-index-url https://antocuni.github.io/pypy-wheels/manylinux2010 numpy

'python' 카테고리의 다른 글

pyinstaller  (0) 2020.11.20
matplotlib 시각화 정리 [여러 그림 그리기, quiver plot]  (0) 2020.11.05
python package 생성  (0) 2020.08.17
python gridSearch, RandomSearch  (0) 2020.07.30
명령프롬프트로 anaconda 열기  (0) 2020.07.01

calibration Curve

머신러닝2020. 8. 19. 11:13

우리는 머신러닝의 성능을 정량적으로 평가를 하기위해 성능평가지표를 사용한다. 

 

이러한 성능평가지표는 예측한 것들 중 얼마나 제대로 예측을하였는가에 관한 지표들이다. 

 

https://ducj.tistory.com/161

 

성능평가지표

 

ducj.tistory.com

하지만 모델은 때로 과대 과소추정되기도 한다. 이를 개선하기 위해서 우리는 calibration curve를

 

활용할 수 있다. 

 

그 원리는 나름 간단하다. 예측값이 예측한 target을 범주화 시키고 

 

이 범주를 기준으로 실제 발생한 비율을 보고 이를 교정하겠다는 것이다.

 

다시말하자면, 예측한 값의 범주 중 실제 target의 비율을 시각화 한 그래프이다. 

 

위 그림을 기반으로 설명을 해보자. 우선 학습한 모델의 예측값을 위 점의 개수인 10개의 범주로 등분한다.

 

등분한 범주 중 [0.4 ~ 0.6) 범주가 있다고 하자.

 

[0.4 ~ 0.6) 에 해당하는 범주의 비율을 계산한 경우 0.8의 비율이 나타났다고 하자. 

 

이는 60%확률로 target이라고 예측하였지만 실제 비율은 80%라는 것을 의미한다.

 

따라서 모델이 과소 추정하였다고 할 수 있다. 

 

이와 반대로 [0.6 ~ 0.75) 구간의 범주에서 모델은 0.75의 확률을 제시하였지만, 실제 비율은 0.6밖에 나타나지 않았다.

 

따라서 모델이 과대 추정하였다고 할 수 있다.

 

이렇게 Calibration curve를 통해 모델의 과대 과소 추정을 판단하고 이를 교정하거나 정량적으로 다룰 수 있다. 

 

또한 Calibration Curve는 범주별로 신뢰구간의 extract binomial test를 기반으로 신뢰구간을 추정하여 제시할 수 있다.

 

끝으로 머신러닝모형을 validation data 를 기반으로 다시 재학습하는 방식으로 이를 교정하지 않을까 하는 생각이 든다.

 

 

 

참고 : 3months.tistory.com/418

 

 

Model calibration 의 개념과 Calibration plot

Model Calibration 예측모형 (predicted model) 을 어떻게 평가할 수 있을까? 가장 직관적이면서 많이 쓰이는 평가 방법은 정확도 (accuracy), 즉, 예측한 것중 몇퍼센트나 맞았는가에 관한 지표일 것이다. 하�

3months.tistory.com

 

'머신러닝' 카테고리의 다른 글

더미화?? 그것은 과연?  (0) 2020.09.06
보루타(boruta algorithm)  (0) 2020.08.09
Dynamic Time Warping(동적 시간 접합)  (0) 2020.07.09
성능평가지표  (0) 2020.04.26
과적합이 좋지 못한 이유?  (0) 2020.01.20

python package 생성

python2020. 8. 17. 00:06

pip는 Python Package Index(PyPI)를 일컷는 약자로 파이썬 패키지를 관리하는 패키지 저장소이다. 

https://pypi.org/

 

 

우선 단계를 구분하자면

 

0. pypi 계정 생성, git 계정 생성

1. github repository 생성

2. 사용할 함수 및 폴더 구성

3. setup.py, __init__.py, README.md, setup.cfg, .gitignore, git init 생성

4. 등록 

5. 사용

 

1. github repository

github 들어가서 아래처럼 Repository를 생성한다. 가급적 이름은 패키지랑 동일한게 좋으나 달라도 무방하다.

 

 

pca_cj 가 생성할 package name이며, 사용할 함수 및 폴더 구성은 다음과 같다.

<package name>

ㄴ<package name>

   ㄴfunction1.py

   ㄴfunction2.py

 

setup.py

from setuptools import setup, find_packages
 
setup(
    # 배포할 패키지의 이름을 적어줍니다. setup.py파일을 가지는 폴더 이름과 동일하게 합니다.
    name                = 'pca_cj',
    # 배포할 패키지의 버전을 적어줍니다. 첫 등록이므로 0.1 또는 0.0.1을 사용합니다.
    version             = '0.2',
    # 배포할 패키지에 대한 설명을 작성합니다.
    description         = 'cor pca method generate',
    # 배포하는 사람의 이름을 작성합니다.
    author              = 'changje.cho',
    # 배포하는 사람의 메일주소를 작성합니다.
    author_email        = 'qkdrk7777775@gmail.com',
    # 배포하는 패키지의 url을 적어줍니다. 보통 github 링크를 적습니다.
    url                 = 'https://github.com/qkdrk7777775/pca_cj',
    # 배포하는 패키지의 다운로드 url을 적어줍니다.
    download_url        = 'https://github.com/qkdrk7777775/pca_cj/archive/master.zip',
    # 해당 패키지를 사용하기 위해 필요한 패키지를 적어줍니다. ex. install_requires= ['numpy', 'django']
    # 여기에 적어준 패키지는 현재 패키지를 install할때 함께 install됩니다.
    install_requires    =  [],
    # 등록하고자 하는 패키지를 적는 곳입니다.
    # 우리는 find_packages 라이브러리를 이용하기 때문에 아래와 같이 적어줍니다.
    # 만약 제외하고자 하는 파일이 있다면 exclude에 적어줍니다.
    packages            = find_packages(exclude = []),
    # 패키지의 키워드를 적습니다.
    keywords            = ['correlation matrix principal component analysis'],
    # 해당 패키지를 사용하기 위해 필요한 파이썬 버전을 적습니다.
    python_requires     = '>=3',
    # 파이썬 파일이 아닌 다른 파일을 포함시키고 싶다면 package_data에 포함시켜야 합니다.
    package_data        = {},
    # 위의 package_data에 대한 설정을 하였다면 zip_safe설정도 해주어야 합니다.
    zip_safe            = False,
    # PyPI에 등록될 메타 데이터를 설정합니다.
    # 이는 단순히 PyPI에 등록되는 메타 데이터일 뿐이고, 실제 빌드에는 영향을 주지 않습니다.
    classifiers         = [
        'Programming Language :: Python :: 3',
        'Programming Language :: Python :: 3.2',
        'Programming Language :: Python :: 3.3',
        'Programming Language :: Python :: 3.4',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7',
    ],
)

 

__init__.py : 내용은 없어도 무방하나 없으면 패키지가 설치가 안됨. 

 

README.md : github에서 보여질 문서

 

# This Package is correlation matrix principal component analysis.

## package example1

cor pca use iris data

```
from sklearn.datasets import load_iris
import pandas as pd
df= load_iris()

df=pd.concat([pd.DataFrame(df.data),pd.Series(df.target)],axis=1)
df.columns=['sepal_len', 'sepal_wid', 'petal_len', 'petal_wid', 'class']

df.tail()
X = df.iloc[:,0:4].values
y = df.iloc[:,4].values

#sklearn default is PCA(X,cor=False,cov_scaling=True,center=True)

finelDF,mean,std,matrix_w=PCA(X,cor=False,cov_scaling=False)
finelDF,mean,std,matrix_w=PCA(X,cor=True)

from matplotlib import pyplot as plt

fig = plt.figure(figsize = (8,8))
ax = fig.add_subplot(1,1,1) 
ax.set_xlabel('Principal Component 1', fontsize = 15)
ax.set_ylabel('Principal Component 2', fontsize = 15)
ax.set_title('2 component PCA', fontsize = 20)
targets = [2, 1, 0]
colors = ['r', 'g', 'b']
for target, color in zip(targets,colors):
    indicesToKeep = y== target
    ax.scatter(finelDF[indicesToKeep ,0]
               , finelDF[indicesToKeep ,1]
               , c = color
               , s = 50)
ax.legend(targets)
ax.grid()

#pca prediction 
a=PCA(X[1:50],cor=False,cov_scaling=False)
#prediction
pred=(X[51:,:]-a[1]).dot(a[3])
```

## package example2

```
#sklearn kernel PCA method but scale is diffrence

X, y = make_moons(n_samples=100, random_state=123)
X_skernpca ,lambdas= kernel_PCA(X,n_components=2, gamma=15,scaling=False)

plt.scatter(X_skernpca[y == 0, 0], X_skernpca[y == 0, 1],
            color='red', marker='^', alpha=0.5)
plt.scatter(X_skernpca[y == 1, 0], X_skernpca[y == 1, 1],
            color='blue', marker='o', alpha=0.5)

plt.xlabel('PC1')
plt.ylabel('PC2')
plt.tight_layout()
plt.show()

 
```

setup.cfg

[metadata]
description-file = README.md

.gitignore : 깃 등록시  무시되게 설정해주는 파일.

# vscode
.vscode/
 
# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class
 
# C extensions
*.so
 
# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
pip-wheel-metadata/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST
 
# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec
 
# Installer logs
pip-log.txt
pip-delete-this-directory.txt
 
# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
 
# Translations
*.mo
*.pot
 
# Django stuff:
*.log
local_settings.py
db.sqlite3
 
# Flask stuff:
instance/
.webassets-cache
 
# Scrapy stuff:
.scrapy
 
# Sphinx documentation
docs/_build/
 
# PyBuilder
target/
 
# Jupyter Notebook
.ipynb_checkpoints
 
# IPython
profile_default/
ipython_config.py
 
# pyenv
.python-version
 
# celery beat schedule file
celerybeat-schedule
 
# SageMath parsed files
*.sage.py
 
# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/
 
# Spyder project settings
.spyderproject
.spyproject
 
# Rope project settings
.ropeproject
 
# mkdocs documentation
/site
 
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
 
# Pyre type checker
.pyre/

git init 

git add .

git commit -m 'repo init'

git remote add origin http://github.com/<깃계정>/<패키지명>.git

git push -u origin master

 

패키지 등록을 위해 3가지 패키지가 요구 

setuptools, wheel, twine

 

pip install setuptools wheel twine

 

python setup.py bdist_wheel

 

명령어 실행시 파일이 생성 되는데 dist 경로를 확인

twine upload dist/pca_cj-0.2-py3-none-any.whl

이제 pip install pca_cj로 다운로드 받아 실행하면되며, 

python에서는

from pca_cj import <function명>의 형태로 사용하면 된다.

 

만약 도중에

 fatal: remote origin already exists 란 애러가 발생할 시 

git remote rm origin 를 사용하여 remote origin을 제거하고 다시 진행하면 설치 될 것이다. 

 

 

참고 : https://doorbw.tistory.com/225

 

파이썬(PYTHON) #25_ 파이썬 패키지 등록하기 (pip 배포하기)

안녕하세요. 문범우입니다. 이번 포스팅에서는 파이썬 패키지를 배포하는 방법에 대해서 함께 살펴보도록 하겠습니다. 1. pip: 파이썬 패키지 관리자 파이썬 패키지를 배포하는 방법에 대해 설명

doorbw.tistory.com

 

'python' 카테고리의 다른 글

matplotlib 시각화 정리 [여러 그림 그리기, quiver plot]  (0) 2020.11.05
pypy  (0) 2020.08.31
python gridSearch, RandomSearch  (0) 2020.07.30
명령프롬프트로 anaconda 열기  (0) 2020.07.01
pandas-profiling  (0) 2020.06.11

보루타 알고리즘은 Random Forest를 기반으로 변수를 선택하는 방법이다.

 

보루타의 알고리즘 아이디어는 다음과 같다.

 

"기존 변수를 복원추출해서 만든 변수(shadow) 보다 모형 생성에 영향을 주지 못했다고 하면 이는 가치가 크지 않은 변수이다."

 

이를 좀 더 알고리즘적으로 말하자면

 

1. 기존변수와 기존변수를 복원추출해 만든 RandomForest 모형을 생성

2. 생성된 모형의 변수중요도를 기준으로 복원추출해 만든 변수들의 변수중요도 중 최대 값을 기준으로 기존변수와 비교

3. 비교 결과 최대 값 보다 큰 기존변수의 hit수를 1증가

4. Tentative에 해당하는 변수를 확률이 0.5이고 시행횟수가 run인 hit-1보다 큰 누적확률 값을 본페로니 교정을 통한 p-value로 유의수준(default = 0.01)보다 낮으면 Tentative 값을 accept로 변환

5. Tentative에 해당하는 변수를 확률이 0.5이고 시행횟수가 run인 hit보다 작은 누적확률 값을 본페로니 교정을 통한 p-value로 유의수준(default = 0.01)보다 낮으면 Tentative 값을 reject로 변환 

6. Tentative에 해당하는 변수가 하나도 없거나 run횟수가 maxrun을 넘을 때까지 위 알고리즘을 반복

- 본페로니 교정은 default이며 옵션으로 변경 가능, Max run의 default는 100, doTrace를 기준으로 정밀도 및 알고리즘이 조금씩 상이해짐.

아래는 R에 나오는 보루타 알고리즘의 예제이다.

3번째 변수는 12번째 시행에서 기각되었으며, 2번째 변수는 16번째, 최종적으로 V6가 기각되었음을 boruta.Ozone값과 ImpHistory를 통해 알 수 있다. 

 

library(Boruta)
data("Ozone")
ozone <- na.omit(Ozone)
summary(ozone)

set.seed(42)
Boruta.Ozone <- Boruta(V4 ~ ., data = ozone, ntree = 500,doTrace=0)
Boruta.Ozone$ImpHistory
plot(Boruta.Ozone)

 

'머신러닝' 카테고리의 다른 글

더미화?? 그것은 과연?  (0) 2020.09.06
calibration Curve  (0) 2020.08.19
Dynamic Time Warping(동적 시간 접합)  (0) 2020.07.09
성능평가지표  (0) 2020.04.26
과적합이 좋지 못한 이유?  (0) 2020.01.20

파랑 : 바람에 의해 발생한 풍랑과 너울을 종합적으로 이르는 말

 - 파고(wave height), 파장(wave length), 주기(wave period)로 구분

 - 바람이 강하게 불 때는 풍랑과 너울을 구분하기 힘듬.

 

풍랑 : 해상에서 바람에 의해 발생하는 파도를 의미

- 바다에서 바람이 해수면 위를 지속적으로 불 때 발생

 

너울 : 풍랑이 바람이 부는 지역을 벗어나 더 이상 발달하지 않고 감쇄하는 형식의 파도를 의미

 

 

 

 

파랑의 특성

 

바람이 막 불기 시작하면 짧은 주기의 표면파, 파고가 높아지면 장주기의 파로 변환

풍랑의 마루는 뾰족한 편이며 파장과 주기가 짧다는 특징을 지님.

 

파고(wave height) : 파곡에서 파봉에 이르는 연직거리를 의미

파장(wave length) : 파봉에서 파봉, 혹은 파곡에서 파곡에 이르는 거리

주기(wave period) : 파봉에서 파봉, 혹은 파곡에서 파곡이 한 지점을 통과하는 시간

파속(wave celerity, wave speed) : 파장을 주기로 나눈 속도

 

유의파고 : 임의 시간동안 발생한 파고 중 파고가 높은 순서로 1/3에 해당하는 것까지의 파고들의 평균을 의미

 

참고

https://www.kiost.ac.kr/cop/bbs/BBSMSTR_000000000391/selectBoardArticle.do?nttId=18459&pageIndex=1&mno=sitemap_12&searchCnd=&searchWrd=

 

KIOST

KIOST는 과학기술로 바다를 재창조해 나갑니다.

www.kiost.ac.kr

 

https://kalchi09.tistory.com/entry/%ED%95%B4%ED%8C%8C%ED%8C%8C%EB%8F%84%EC%9D%98-%EC%97%AC%EB%9F%AC%EA%B0%80%EC%A7%80-%EC%A2%85%EB%A5%98

 

해파(파도)의 여러가지 종류

고등학교 교육과정에서 다루는 해파는 천해파와 심해파이다. 그리고 파가 발달하고 소멸하는 과정을 기준으로하여 풍랑, 너울, 연안쇄파 정도를 배운다. 그런데 해파에는 이것밖에 없을까? 아��

kalchi09.tistory.com

 

 

'그 외' 카테고리의 다른 글

병렬 프로그래밍 용어 정리  (0) 2020.06.11
인터넷 속도 올리기  (0) 2020.02.01
[R] 재미삼아 푸는 문제  (0) 2020.01.15
지도 그림 그리기 예제  (0) 2019.11.11
[주식] 키움 영웅문 통한 주식 자료다운로드  (0) 2019.11.11