2021년에 큰애가 수능을 보기 시작한 이후로 2022년에는 큰애 재수 그리고 2023년에는 둘째 고3 수능을 보는 날이 내일이다. 오늘은 일찍 와서 성당도 다녀오고,

2023년 수능 전날 고3 미사 : 윗줄 왼쪽 끝에 남자애가 둘째

반응형

running-example.csv
0.00MB

 process mining 기본 코딩 자료

 

https://pm4py.fit.fraunhofer.de/getting-started-page

반응형

금요일 저녁에 운동을 가야 했는데, 집에서 누워 있다가 결국 못가고 잠이 들었다. 토요일에는 오랜만에 아내와 함께 로봇 조립 가서 정신없이 보내고 오후에 집에 와서 낮잠 자고, 저녁에 산책 가서 1.5리터 맥주 가져와서 맥주 마시고 기절. 일요일에는 아침에 일어나서 책보고 하다가 도서관 다녀오고 낮잠 자고 나니까 저녁이네. 이번 주말에는 틈날때마다 코틀린 코딩한 것 말고는 좀 여유 있게 쉬었다. 오늘 오후에는 아내 옆에서 책 읽다가 기절해서 소파에서 자고 일어난 것 말고는 괜찮았다.

아내가 왜 요즘 성당 안가냐고 타박을 준다. 어머니 생각이 나면 성당에 가기 싫어지고 우울증이 온다. 최근에 우울증이 올 정도로 미친듯이 일했던 기억이 나서 더욱 그런지도 모르겠다. 화요일에는 셋째 학교 상담을 가야 해서 오후 반차를 냈다. 아직 1.5일 휴가가 남아 있기는 한데, 틈날때마다 사용하면 될 것 같다. 셋째가 11월 16일 수능을 보다 보니, 당분간은 어디 가기 힘들 것 같고 논술 전형 일정 끝나면 같이 바닷가라도 다녀오려고 생각중이다. 나도 아이도 갑갑한 요즘이다.

반응형

 여의도 콘라드 호텔에서 한다고 해서 참석해서 알테어 제품에 대한 설명과 PWC 컨설턴트의 최근 트렌드에 대한 설명을 들었다.

 

https://web.altair.com/altair-finance-dx-meet-up-korea

반응형

 아래 사이트에서 코드에 필요한 공식과 개념을 이해했다. 공식에 대해서는 피상적으로 이행하는 것과 실제 그것을 구현하는 것이 얼마나 차이가 있는지 알 수 있었던 좋은 기회이지 싶다.

https://medium.com/data-science-in-your-pocket/how-feature-importance-is-calculated-in-decision-trees-with-example-699dc13fc078

 

How feature importance is calculated in Decision Trees? with example

Understanding the math behind

medium.com

1. 필요한 라이브러리 불러오기

import pandas as pd

from sklearn.tree import DecisionTreeClassidifer

from sklearn.tree import export_text

import torch

 

2. train_data를 이용하여 Decision Tree model 생성

clf=DecisionTreeClassifier(random_state=2, max_depth=5, min_samples_split=2000, min_samples_leaf=10000)

clf.fit(X_train, y_train)

# 전체 모델 로직 확인

r=export_text(clf, feature_names=list(X_train.columns))

print(r)

torch.save(clf, "/DecisionMgmt/kp19983/dctl_v0_3.torch")

 

3. Model을 불러와서 수기로 계산


clf = torch.load("/DecisionMgmt/kp19983/dctl_v0_3.torch")

dtree = clf.tree_

# X_train 데이터 길이 확인
print(len(X_train))

df_t = pd.DataFrame(columns=['node', 'size', 'importance']

for i in range(dtree.node_count):
    node = i
    size = dtree.n_node_samples[i]
    if (dtree.children_left[i] == -1) and (dtree.children_right[i] == -1):
        importance = 0
    else:
        importance = (dtree.n_node_samples[i] / len(X_train) * dtree.impurity[i]) \
            - (dtree.n_node_samples[dtree.children_left[i]] / len(X_train)) * dtree.impurity[dtree.children_left[i]] \
            - (dtree.n_node_samples[dtree.children_right[i]] / len(X_train)) * dtree.impurity[dtree.children_right[i]]
    df_t=df_t.append({'node': node, 'size': size, 'importance': importance}, ignore_index = True)

df_t['node'] = df_t['node'].as_type(int)
df_t['size'] = df_t['size'].as_type(int)

# 수기로 계산된 각 노드별 feature_importance sum
print(df_t.sum())

# sklearn.DecisionTreeClassifier에서 제공하는 feature_importance DataFrame 생성
importances = clf.feature_importances_

feature_importances = pd.concat([pd.DataFrame(X_train.columns), pd.DataFrame(importances)], axis=1)
feature_importances.columns = ['feature_nm', 'importances']
feature_importances['calc_impt'] = feature_importances['importances'] * df_t.importance.sum()
feature_importances = feature_importances[feature_importances.importances > 0]
feature_importances.sort_values(by = ['importances'], ascending=False, inplace = True, ignore_index = True)

print(feature_importances)

# Sub Tree Model
fnl_xlist = feature_importances['feature_nme'].tolist()

df2 = pd.concat([df, pd.DataFrame(clf.apply(df[fnl_xlist], check_input=True), columns=['NODE']], axis = 1)

node6 = df2[df2['NODE']==6]
node6_X = node6[fnl_xlist]
node6_y = node6['TARGET']

clf_sub = DecisionTreeClassifier(random_state = 2, max_depth=3, min_samples_split = 20, min_samples_leaf = 20000)
clf_sub.fit(node6_X, node6_y)

dtree = clf_sub.tree_

torch.save(clf_sub, "/DecisionMgmt/kp19983/dctl_v0_3.torch")

clf_sub = torch.load("/DecisionMgmt/kp19983/dctl_v0_3.torch")

node6_df_t = pd.DataFrame(columns=['node', 'size', 'importance'])

for i in range(dtree.node_count):
    size = dtree.n_node_samples[i]
    if (dtree.children_left[i] == -1) and (dtree.children_right[i] == -1):
        importance = 0
    else:
        importance = (dtree.n_node_samples[i] / len(X_train) * dtree.impurity[i]) \
            - (dtree.n_node_samples[dtree.children_left[i]] / len(X_train)) * dtree.impurity[dtree.children_left[i]] \
            - (dtree.n_node_samples[dtree.children_right[i]] / len(X_train)) * dtree.impurity[dtree.children_right[i]]
    node6_df_t=node6_df_t.append({'node': node, 'size': size, 'importance': importance}, ignore_index = True)

node6_df_t['node'] = node6_df_t['node'].astype(int)
node6_df_t['size'] = node6_df_t['size'].astype(int)

print(node6_df_t)

node6_importances.columns = ['feature_nm', 'importances']
node6_feature_importances['calc_impt'] = node6_feature_importances['importances'] * node6_df_t.importance.sum()
node6_feature_importances = node6_feature_importances[node6_feature_importances.importances > 0]
node6_feature_importances.sort_values(by = ['importances'], ascending=False, inplace = True, ignore_index = True)

print(node6_feature_importances)

comb_feature_importances=pd.merge(feature_importances[['feature_nm', 'calc_impt']],
                                  node6_feature_importances.rename(columns = {'calc_impt': 'sub_calc_impt'})[['feature_nm', 'sub_calc_impt']],
                                  how='outer',
                                  on = ['feature_nm'],
                                  validate='m:m')

comb_feature_importances.fillna(0, inplace=True)
comb_feature_importances['fnl_calc_impt'] = comb_feature_importances['cal_impt'] + comb_feature_importances['sub_calc_impt']
comb_feature_importances['importances'] = comb_feature_importances['fnl_calc_impt'] / comb_feature_importances['fnl_calc_impt'].sum()
comb_feature_importances.sort_values(by = ['fnl_cal_impot'], ascending=False, inplace = True, ignore_index = True)

print(comb_feature_importances)

from matplotlib.pyplot as plt

plt.figure(figsize = (14, 10))
plt.title('Combined Feature Importances Top')
sns.barplot(x = comb_feature_importances.importances, y = comb_feature_importances.feature_nme)
반응형

'Python, PySpark' 카테고리의 다른 글

pm4py  (0) 2023.10.31
Python 날짜 스트링 전처리  (0) 2023.08.16
파이썬 한권으로 끝내기 - 234페이지 (credit_final.csv)  (0) 2023.05.28
rownumber() over () in python pandas  (0) 2023.05.01
cosine similarity 계산  (0) 2023.04.12

 원래 이런 입문서는 자잘한 오류가 많다. 아니면 중간에 설정이 변경되어서 더 이상 예전 버전의 옵션이 돌아가지 않는 것일 수도 있고 말이다.

 

1. Select a Project Template 에서는 "Empty View Activity"를 선택해라 그렇지 않으면 주요 Source 코드 들이 나오지 않는다.

2. 실행했을 때, "Update this project to use a newer compileSdk of at least 34, for example 34"이라는 문구가 나오면, 아래와 같이 하면 된다. File - Project Structure를 눌러준다.

 

Android Studio - File - Project Structure

3. 화면에서 "Compile Sdk Version"을 선택해서 "34"를 선택하면 된다. 이거 몰라서 헤맸던 시간이 많다. 

Compile Sdk Version

5. MainActivity.kt : 여기서 조심해애 할 것은 아래 코드를 입력할 때 전체를 다 입력해야 하고, "setContentView(binding.root)"를 먼저 입력하면 자동으로 문법이 잡힌다는 것이다. 이것 모르고 그냥 하다가 시간 많이 잡아 먹었다.

val binding = ActivityMainBinding.inflate(layoutInflater)

 여기는 전체 코드

package kr.co.hanbit.sayhello

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kr.co.hanbit.sayhello.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        val binding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(binding.root)
        binding.btnSay.setOnClickListener {
            binding.textSay.text="Hello Kotlin!!!"
        }
    }
}

 

6. build.grade.kts (:app) 에서 아래 부분을 추가해야 합니다. 책과는 달리 viewBinding=True를 입력해 주셔야 합니다. 책에는 중간에 "="가 없는데, 이게 없으면 에러 납니다. 저 이거 못찾아서 한참을 헤맸습니다.

 

7. 그리고 마지막에 실행하면 녹색 버튼을 누르면 실행이 됩니다. 

실행 버튼은 위의 플레이 버튼입니다.

8. 가장 중요한 것 : Device Manager에서 "Running Devices:" 밑에 있는 전원 버튼을 꼭!!! 눌러 주셔야 합니다. 저 이거 몰라서 이거 왜 안되지 하다가 우연히 눌러보고 된다는 것을 알았습니다.

 생각보다 책이 자세히 나와 있고 중간 중간 못찾는 부분은 구글로 검색해서 유튜브로 보시면 바로 알게 되더군요. 가끔 설명하는 분이 영어나 스페인어를 써서 그렇지 구글 + 유튜브이면 왠만한 것들은 다 찾을 수 있어서 좋았습니다. :) 앞으로도 간간이 올리도록 하겠습니다.

반응형

+ Recent posts