728x90
반응형

32bit 개발환경으로 변경해야 되는 이유

PC 등에서 공개 데이터(기상, 대기질, 증권 등)를 수집하기 위해서는 각 서버의 API를 사용해야 합니다. 이때, API 개발 환경의  bit 수를 맞춰줘야 합니다. 즉, 윈도우 OS Anaconda 64bit 환경에서 32bit API를 다룰려고 하면 Error가 발생합니다. 따라서,  아래와 같이 32-bit 개발 환경으로 변경하여야 됩니다. 이 방법의 장점은 아래와 같습니다. 

   1. 32bit 윈도우를 재설치할 필요없이 64bit 윈도우에서 개발 환경 설정 가능

   2. 32bit 아나콘다 재설치 필요없이 64bit 아나콘다에서 개발 환경 설정 가능

 

방법

1. Anaconda Prompt 에서 아래 과정 수행

    (base) C:\Users\chpark> conda --version

    conda 4.12.0

    (base) C:\Users\chpark> python --version

    Python 3.9.12

 

    (base) conda info

              :   

        platform : win-64  로 확인됨.

              : 

 

2. 32bit 로 아나콘다 환경 변경

    (base) C:\Users\chpark>set CONDA_FORCE_32BIT=1     

      위 명령을 수행하면 아무 반응이 없습니다. 주의할 점은 32BIT=1 사이에 공백이 없어야 합니다. set CONDA_FORCE_32BIT=0 를 입력하면 다시 64bit로 돌아옵니다. 아래와 같이 아나콘다 bit를 확인할 수 있습니다. 

    (base) conda info

            :     

        platform : win-32  로 변경되었는지 확인

            : 

3.  32bit 개발을 위한 가상환경을 설정

    (base) C:\Users\chpark>conda create -n py39_32 python=3.9.12 anaconda

    (base) C:\Users\chpark>conda activate py38_32 

    (py39_32) C:\Users\chpark> conda info

            아래 결과와 같이 platform : win-32  임이 확인되면 완성입니다. 

 

PyQt5 설치

32bit PyQt5를 설치하려면 위에서 생성된 가상환경 py39_32에서

    (py39_32) C:\Users\chpark>   pip install pyqt5 

를 실행하면 됩니다. 

 

 

가상환경 IDE에 연결하기

PyCharm 등의 IDE에 위에서 생성한 가상환경을 연결하면 됩니다. 

 

 

 

 

 

 

참고문헌: https://steady-coding.tistory.com/270

728x90
반응형
728x90
반응형

1. PyCharm 설치

 

2. 웹스크래핑과 판다스

import requests
from beautifulsoup4 import beautifulsoup

#url = "http://www.naver.com"
url = "https://finance.naver.com/item/main.nhm?code=000660"
html = requests.get(url).text  # 웹페이지 주소를 requests 모듈의 get()메서드에 전달
soup = BeautifulSoup(html, "html5lib")

 

from bs4 import BeautifulSoup 실행시 오류나면, 아래와 같이 설치

 

(base) conda install bs4

 

728x90
반응형
728x90
반응형

 

11. 지면상태 관측

11.1 개요 (1) 지면은 습하거나 건조한 정도에 따라 태양열을 받아들이는 정도가 다르므로 지면온도의 상승 등에 영향을 주어 상층대기 구조에도 영향을 미치게 된다. (2) 지면상태는 다음과 같이 WMO Code 0901과 0975에 의해 관측한다. 11.2 관측 (1) 지면이 눈 또는 측정 가능한 얼음으로 덮여 있지 않을 때 0. 지표면이 건조(지면에 균열이 없으며, 모래 먼지는 일어나지 않음) 1. 지표면이 습윤함 2. 지표면에 물이 고여 있음(지표면에 크고 작은 물웅덩이가 생김) 3. 지표면에 유수가 있음 4. 지표면이 얼어있음 5. 지표면이 빙막으로 덮여 있음 6. 지표면은 건조된 먼지 또는 모래로 덮여 있으나 완전히 덮여 있지는 않음 7. 지표면은 건조된 먼지 또는 모래로 얇게 완전히 덮여 있음 8. 지표면은 건조된 먼지 또는 모래로 보통 또는 두껍게 덮여 있음 9. 지표면이 대단히 건조하여 균열이 있음 ※ 숫자부호 0~2와 4는 대표적인 맨땅에 적용하고 3 또는 5~9는 광범위한 지역에 적용한다. (2) 지면이 눈 또는 측정 가능한 얼음으로 덮여 있을 때 10. 지표면이 얼음으로 거의 덮여 있음 11. 지표면의 1/2 미만이 다져진 눈 또는 습성눈(얼음의 유무에 관계없이) 으로 덮여 있음 12. 지표면의 1/2 이상이 다져진 눈 또는 습성눈(얼음의 유무에 관계없 이)으로 덮여 있으나 완전히 덮인 상태는 아님 13. 지표면은 다져진 눈 또는 습성눈으로 균일하게 완전히 덮인 상태 14. 지표면은 다져진 눈 또는 습성눈으로 불균일하게 완전히 덮인 상태 15. 지표면의 1/2 미만이 푸석푸석한 건성눈으로 덮인 상태 16. 지표면의 1/2 이상이 푸석푸석한 건성눈으로 불균일하게 덮인 상태 (완전히 덮인 상태는 아님)17. 지표면이 푸석푸석한 건성눈으로 균일하게 완전히 덮인 상태 18. 지표면이 푸석푸석한 건성눈으로 불균일하게 완전히 덮인 상태 19. 지표면이 눈으로 두껍게 완전히 덮인 상태 ※ 광범위한 지역에 적용한다. ※ 눈 이외의 고체상 강수를 포함한다

 

출처:

기상청 전자도서관 - 지상기상관측지침 - [33393_지상기상관측지침(2016.7).pdf] (kma.go.kr)

728x90
반응형
728x90
반응형

1. 정확도

실제와 에측이 얼마나 일치하는가로 모델의 성능을 평가함

연속형 자료의 경우

예측값의 일치도를 의미.

정확도가 평가의 대부분임

범주형 자료의 경우

예측 범주의 일치정도를 의미.

정확도 뿐 아니라 그 이면을 세세하게 검토해야 함. 

 

2. 오차행렬(confusion matrix)

오차 행렬은 이진 또는 다중 범주형 레이블의 하위 범주는 세부적으로 살펴보면서 실제 범주와 예측 범주의 일치 혹은 오류를 파악할 수 있는 결과임

 

 

 

  0 1
0 90 10
1 20 80

 

  음성예측 양성예측
음성 클래스 TN FP
양성 클래스 FN TP

 

 

정확도 = (90+80)/200 = 85%

 

이진 분류의 평가 지표

3. 정밀도

양성 예측의 정확도를 의미

 

4. 재현율

분류기가 정확하게 예측한 양성 샘플의 비율

민감도 또는 진짜 양성 비율이라고도 함. 

암진단/범죄여부/불법영상 진단 등

 

5. f-score

정밀도와 재현율의 조화평균으로 두 지표를 종합적으로 파악

 

정밀도 = TP/(TP + FP)

재현율 = TP/(TP+FN)

f-score = 2/((1/정밀도) + (1/재현율))

728x90
반응형
728x90
반응형

의사 결정 나무 

다양한 의사결정 결로와 결과를 놓고 나무 구조를 이용하여 설명하는 것

질문을 던지면서 대상에 접근해 가는 스무고개 놀이와 유사

질문은 조건을 이분법적으로 제시하면서 진행한다. 

지도학습 기법으로서 변수의 영역을 게속적으로 분할해 나가면서 집단을 몇개의 소집단으로 분류하거나 예측하는 기법

 

맨 위쪽에 뿌리 노드로 시작해서 아래로 가면서 가지를 치고 마지막까지 진행한다. 

처음에 어떤 분류기준을 선택할 것인가를 결정하는 것은 여러 알고리즘이 있다. 

예를 들어, 프로 야구선수중에서 자유게약 선수(Free Agaent: FA)의 연봉을 의사결정 나무로 간단히 그려보자. 

의사결저과정에서 나무를 가지고 목표와상황과 상호 관련성을 나타내어 최종 결정을 내린다. 의사결정 규칙을 나물 구조로 도식화 하여 관심대상의 집단을 몇 개의 소집단으로 분류하거나 예측할 수 있다. 

if-else 원리로 코딩할 수 있다. 

 

일반적으로 기업에서 의사결정을 내릴때, 어떠한 위험(손실)과 기회(이익)가 있는지 판단하여 최적의 의사결정을 도와주는 프로그램으로 많이 활용한다. 

1단계

나무 모형 구축: 분석 목적과 자료구조에 따라 적절한 분리기준과 정지규칙을 정하여 나무를 만들어 나간다. 

2단계

가지치기 : 분류 오류를 크게 할 위험이 높거나 부적절한 추론규칙이 내재된 가지는 제거한다. 

3단계

분리작업: 더 이상 유효하지 않거나 최소 노드수에 도달할 때까지 분리를 계속한다. 

4단계

타당성 평가: 이익 또는 위험 도표나 검정자료를 이용하여 나무 모형의 교차 타당성을 평가한다. 

5단계

해석과 예측: 결과를 해석하고 예측을 수행한다. 

 

시각적인 효과는 행동의 결정 뿐만 아니라 미래의 계획을 세우는 데도 유용하게 사용될 수 있다. 

그래서 의사결정나무를 적합성나무(relevance tree)라고도 부른다. 

 

 

 

 

728x90
반응형
728x90
반응형

https://machinelearningmastery.com/avoid-overfitting-by-early-stopping-with-xgboost-in-python/

 

Avoid Overfitting By Early Stopping With XGBoost In Python

Overfitting is a problem with sophisticated non-linear learning algorithms like gradient boosting. In this post you will discover how you can use early stopping to limit overfitting with XGBoost in Python. After reading this post, you will know: About earl

machinelearningmastery.com

 

728x90
반응형
728x90
반응형

from keras import models
from keras import layers
from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint
# 모델 구성
_input_shape = X_train.shape[1]   # input_shape : # of columns +1
_epochs = 500  # 모든 샘플에 대해 학습되는 횟수
_batch_size = 256 #512  # 샘플을 한번에 몇 개씩 처리할 지 결정. 전체 rows 를 _batch_size 만큼 끊어서 집어 넣어라.
_patience = 200
_node_in = 16  # 입력층 노드 수
_node1 = 16  # 은닉층 노드 수 
_node_out = 1  # 출력층 노드 수

model = models.Sequential()  #은닉층을 차곡차곡 쌓는 방식의 모델이 sequential()
model.add(layers.Dense(_node_in, activation = 'relu', input_shape=(_input_shape,)))   
                                            # _input_shape 개의 입력값을 받아 은닉층 _node_in 개 노드로 보낸다는 뜻.
model.add(layers.Dense(_node1, activation = 'relu'))
model.add(layers.Dense(_node1, activation = 'relu'))
model.add(layers.Dense(_node1, activation = 'relu'))
# model.add(layers.Dense(16, activation = 'relu'))
model.add(layers.Dense(_node_out, activation='sigmoid'))
# 모델 컴파일
model.compile(optimizer = 'rmsprop', loss='binary_crossentropy', metrics=['accuracy'])
## optimizer = Adadelta, Adagrad, Adam, RMSprop, SGD
# 모델 저장 폴더 생성
# MODEL_DIR = 'C:\Users\chpark\OneDrive\My_Code\L_Deeplearning\model_out'
# if not os.path.exists(MODEL_DIR):
#     os.mkdir(MODEL_DIR)
modelpath = 'C:/Users/chpark/OneDrive/My_Code/L_Deeplearning/model_out/{epoch:02d}-{val_loss:.4f}.hdf5'
# 모델 업데이트 및 저장
checkpointer = ModelCheckpoint(filepath=modelpath, monitor='val_loss', verbose=1, save_best_only=True)
# 학습 자동 중단 설정
early_stopping_callback = EarlyStopping(monitor = 'val_loss', patience=_patience)

 

history = model.fit(X_train, y_train, epochs=_epochs,
                   batch_size=_batch_size, 
                   validation_data=(X_test, y_test), 
                   verbose = 1,
                   callbacks=[early_stopping_callback])

history_dict = history.history
loss= history_dict['loss']
val_loss = history_dict['val_loss']
acc = history_dict['accuracy']
val_acc = history_dict['val_accuracy']

 

 

 

# 훈련과 검증 손실 그리기

epochs = range(1, len(loss) + 1)

plt.plot(epochs, loss, 'bo', label='Training loss')    # bo means blue dot
plt.plot(epochs, val_loss, 'b', label = 'Validation loss')    # 'b'는 파란색 실선
plt.title('Training and validation loss')
plt.xlabel('epochs')
plt.ylabel('Loss')
plt.legend()

plt.show()

 

 

 

 


# 훈련과 검증 정확도 그리기
plt.clf()     # initialize graph


plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()


 
329/329 [==============================] - 1s 3ms/step - loss: 16053300935654324823916544.0000 - accuracy: 0.8158
728x90
반응형
728x90
반응형

from keras import models
from keras import layers
from keras.callbacks import EarlyStopping
from keras.callbacks import ModelCheckpoint
# 모델 구성
_input_shape = X_train.shape[1]   # input_shape : # of columns +1
_epochs = 500  # 모든 샘플에 대해 학습되는 횟수
_batch_size = 256 #512  # 샘플을 한번에 몇 개씩 처리할 지 결정. 전체 rows 를 _batch_size 만큼 끊어서 집어 넣어라.
_patience = 200
_node_in = 16  # 입력층 노드 수
_node1 = 16  # 은닉층 노드 수 
_node_out = 1  # 출력층 노드 수

model = models.Sequential()  #은닉층을 차곡차곡 쌓는 방식의 모델이 sequential()
model.add(layers.Dense(_node_in, activation = 'relu', input_shape=(_input_shape,)))   
                                            # _input_shape 개의 입력값을 받아 은닉층 _node_in 개 노드로 보낸다는 뜻.
model.add(layers.Dense(_node1, activation = 'relu'))
model.add(layers.Dense(_node1, activation = 'relu'))
model.add(layers.Dense(_node1, activation = 'relu'))
# model.add(layers.Dense(16, activation = 'relu'))
model.add(layers.Dense(_node_out, activation='sigmoid'))
# 모델 컴파일
model.compile(optimizer = 'rmsprop', loss='binary_crossentropy', metrics=['accuracy'])

# 모델 저장 폴더 생성
# MODEL_DIR = 'C:\Users\chpark\OneDrive\My_Code\L_Deeplearning\model_out'
# if not os.path.exists(MODEL_DIR):
#     os.mkdir(MODEL_DIR)
modelpath = 'C:/Users/chpark/OneDrive/My_Code/L_Deeplearning/model_out/{epoch:02d}-{val_loss:.4f}.hdf5'
# 모델 업데이트 및 저장
checkpointer = ModelCheckpoint(filepath=modelpath, monitor='val_loss', verbose=1, save_best_only=True)
# 학습 자동 중단 설정
early_stopping_callback = EarlyStopping(monitor = 'val_loss', patience=_patience)

 

 

history = model.fit(X_train, y_train, epochs=_epochs,
                   batch_size=_batch_size, 
                   validation_data=(X_test, y_test), 
                   verbose = 1,
                   callbacks=[early_stopping_callback])

history_dict = history.history
loss= history_dict['loss']
val_loss = history_dict['val_loss']
acc = history_dict['accuracy']
val_acc = history_dict['val_accuracy']

 

 

# 훈련과 검증 손실 그리기

epochs = range(1, len(loss) + 1)

plt.plot(epochs, loss, 'bo', label='Training loss')    # bo means blue dot
plt.plot(epochs, val_loss, 'b', label = 'Validation loss')    # 'b'는 파란색 실선
plt.title('Training and validation loss')
plt.xlabel('epochs')
plt.ylabel('Loss')
plt.legend()

plt.show()

 


# 훈련과 검증 정확도 그리기
plt.clf()     # initialize graph


plt.plot(epochs, acc, 'bo', label='Training acc')
plt.plot(epochs, val_acc, 'b', label='Validation acc')
plt.xlabel('Epochs')
plt.ylabel('Accuracy')
plt.legend()
plt.show()

results = model.evaluate(X_test, y_test)

 
329/329 [==============================] - 1s 3ms/step - loss: 2531033943336512517046272.0000 - accuracy: 0.7959
728x90
반응형
728x90
반응형

https://blog.naver.com/PostView.nhn?blogId=kimmingul&logNo=222241983842 

 

[Fortran] 편리한 CSV 파일 입출력을 위한 Modern Fortran 라이브러리 : Fortran_CSV_Module

Fortran에서는 데이터 파일의 입출력을 위해 파일처리 관련 기본 명령어인 OPEN, CLOSE, REA...

blog.naver.com

 

728x90
반응형

+ Recent posts