2022년 5월 16일 월요일

오렌지에서 Missing Data 처리 (Impute Widget)

 오렌지에서 이빨빠진 데이터를 처리하는 위젯은 Impute Widget을 사용합니다.

1. 먼저 연습에서 자주 사용되는 가공되기 전의 Titanic 데이터를 다운받습니다.  Titanic 

2. 오렌지의 캔바스를 아래와 같이 배치하고 연결합니다.


3. File Widget을 선택하고 위에서 불러온 Titanic.csv 데이터를 읽어 옵니다.

(4)에서 이빨 빠진 데이터가 2.5% 임을 확인합니다.

4. Impute Widget을 선택하여 현재 Don't impute 임을 확인합니다.

5. Feature Statistics Widget을 선택하여 이빨 빠진 데이터를 확인합니다. Data Table Widget에서도 확인하세요.


38, 41번째 Age 가 "?"로 되어있슴을 확인하십시요.

6. Impute Widget을 선택하여 Default Method 탭에서 적당한 것을 선택합니다. 저는 Model-vased imputer (simple tree)를 선택했습니다. 개뱔 Feature는 아래쪽 Individual Attribute Settings에서 하면 되겠군요.

7. Feature Statistics Widget을 선택하여 데이터가 채워졌슴을 확인합니다. Data Table Widget에서도 확인하십시요.


(1),(2),(3)에서 Missing data가 채워졌슴을 확인합니다.

38 = 41, 41 =42.166.... 으로 채워졌고 평균은 29.82로 변동이 없습니다.



오렌지로 해보는 데이터 결합 연습 Merge Data (Inner Join)

 오렌지와 유사한 프로그램으로 상용(유료) 프로그램인 Rapidminer에 있는 데이터 결합 예제를 오렌지로 구현해 보았습니다. 

1. 오렌지의 캔바스를 아래와 같이 구성하고 연결합니다.


2. 데이터를 다운 받아 적당한 폴더에 저장합니다. ProductsTransaction

3. File Wedget을 선택하고 마우스오른쪽 버튼하고 [Rename F2]를 선택해 각각 Products, Transaction으로 이름을 바꾸고, 각각 저장된 파일을 불러옵니다.



3. Merge Data Wedget을 선택하고 아래와 같이 실정합니다.


이때 주의 할 것은 Transaction File Wedget과 Merge Data Wedget의 연결이  Data이고 Products File Wedget과 Merge Data Wedget의 연결이 Data->Extra Data가 되어야 합니다.

4. Merge Data Wedget 과 Data Table (1)과의 연결이 되었는지 확인합니다. 하나의 Data Table Wedget에 여러 Wedget의 출력을 연결 할 수 있군요. Data Table (1)을 선택하여 결과를 확인합니다.


5. Feature Constructor Wedget을 선택하고 아래와같이 계산식을 입력합니다.


6. Select Columns Wedget을 선택하여 아래와 같이 지정하고 Data Table (1)에서 확인합니다.



7. Group by Wedget을 선택하고 아래와 같이 지정하고 Data Table Wedget에서 확인합니다.


고객 ID = 387인 분이 8가지를 구입하여 $10,930.4를 지불하셨네요.



2022년 5월 14일 토요일

오렌지 KNN Model에서 K값의 변화에 따른 정확도 측정

 오렌지의 많은 기능이 맘에 들지만 Line Plot Wedget은 마음에 들지 않습니다. 직관적이지 않아요. 그러나 타임시리즈에 있는 Line Chart Wedget을 이용하면 땜빵은 됩니다. 다만 0부터 시작한다는 점이 접접...

1. 오렌지의 캔바스에 아래와 같이 배치하고 연결합니다. 2개의 그룹을 하나의 캔바스에 구성하였습니다.


2. File Wedget을 선택하여 앞에서 사용한 diabetes.csv 파일을 읽어 옵니다. 케글에서 다운받으세요. Outcome을 target으로 지정하였습니다.


3. Data Sampler Wedget을 선택하여 Fixed proportion of data = 60% 로 설정합니다.


4. KNN Wedget 과 Test and Score Wedget, Create Table Wedget을 같이 띄어놓고



KNN Wedget의 (1)Number of neighbors 값을 1 ~ 11 까지 변동 시키면서

Test and Score Wedget을 Test on train data 와 Test on test data를 번갈아 가면서 선택 했을 때의 CA 값을 읽어

Create Table Wedget에 입력합니다. Test on train data는 2번컬럼에 Test on test data는 3번 컬럼에 입력합니다.

5. Select Columns Wedget을 선택하고 아래와 같이 설정합니다.


6. Line Chart Wedget을 선택하여 결과를 확인합니다.

이처럼 K 값(이웃의 갯수)을 변경함에 따라 학습때와 테스트때의 차이가 적게 되는 K 값을 KNN Model을 이용한 분석에 사용합니다. 여기서는 K=10 이군요.


오렌지로 로지스틱알고리즘을 이용한 당뇨병 분류 2 (훈련, 테스트, 체크)

 앞에서는  데이터를 2로 구분(훈련, 시험)하여 분류했으나 이번에는 3으로 구분(훈련, 시험, 체크)하여 파이썬으로 작업한 것과 완전히 유사한 결과를 얻을 수 있도록 오렌지로 구성해 봅니다.

1. 오렌지의 캔바스에 위젯을 아래 그림과 같이 배치하고 연결합니다.


2. File Widget을 선택하여 앞에서 다운 받은 자료를 불러옵니다. Outcome을 target으로 지정하였습니다.


3. Data Sampler (1) Widget을 선택하고 체크 데이터 갯수가 17개(파이썬 분석과 일치 시키기위하여)가 되도록 (2) Fixed sample size = 751을 지정합니다.


4.Data Sampler (2) Widget을 선택하여 Test Data가 100개가 되도록  (2) Fixed sample size = 651을 지정합니다.


5. Test and Score widget을 아래와 같이 설정합니다. 정확도(CA 가 0.78이 되지 않으면 Data Sampler (1)의 [Sample Data] 버튼을 수회 크릭하여 0.78이 되도록 합니다. 교차검정을 랜덤하게 하기때문에 할때마다 결과 값이 조금 다르게 나오는 것 같습니다.


6. Save Model Widget을 선택하여 디폴트 파일이름으로 저장합니다.


7. Load Model Widget을 선택하여 방금 저장된 파일을 불러옵니다. 모델을 저장하고 불러오는 것을 익히는 것입니다.


8. Predictions Wedget을 선택하여 체크데이터의 결과를 확인합니다.


(1) Calsses in data를 선택하고 (2)에서 '0'(음성)과 '1'(양성)의 확률을 확인하십시요. 또한 (3)에서 CA = 0.765로 정확도를 확인합니다. 훈련의 테스트결과 0.78임을 보면 과대, 과소 적합은 아닌 것 같군요.

9. 마지막으로 Sieve Diagram (1)을 확인한 다음 입력을 Data Table (2)에서 받게 하고 더블크릭하여 결과를 확인합니다.



(1)번 = Outcome, (2)번 = BloodPresure으로 하였을 때 Outcome이 1(양성=당뇨)일때 (4)번보다 (3)번이 촘촘한것을 확인하시고, Outcome이 0(음성=당뇨가 아님)일때 (6)번보다 (5)번이 더 촘촘함을 확인하십시요. 이것으로 당뇨는 혈압이 높다고  반드시 확률이 높아지는 것이 아니고 오히려 낮아짐을 알 수 있습니다. (앞에서 해결하지 못하던 것을 해결하였습니다. 그런데 이는 17개의 체크데이터 결과임을 유의 하십시요). 



2022년 5월 13일 금요일

오렌지로 로지스틱알고리즘을 이용한 당뇨병 분류 1 (훈련, 시험)

 머신러닝 학습용 프로그램인 오렌지를 이용하여 실무에 어느정도까지 접근 할 수 있나를 보여주기 위하여 파이썬으로 하는 분석을 오렌지로 해봅니다.

파이썬으로하는 자료는 파이썬 원본에서 확인 할 수 있습니다. 이것은 기계 학습을 사용하여 혈압, 체질량 지수(BMI), 나이 등과 같은 환자에 대한 정보를 기반으로 당뇨병이 있는지 여부를 예측할 것으로 현재 제가 알고 있는 오렌지의 기능을 최대한 이용하여 분석하는 것으로 다른 위젯을 이용하여 더 알기쉽게 접근 할 수도 있을 것입니다.

1. 우선 데이처를 가져와야 겠지요. 케글에서 다운로드 받습니다. 적당한 곳에 저장하고 File Widget으로 불러옵니다.


2. Data Description 는 Data Table Widget을 연결하여 확인합니다. 이 부분은 파이썬코딩방식보다 직관적입니다.

Pregnancies: 임신횟수
Glucose: 경구내당 검사에서 2시간 동안의 혈장 포도당 농도
BloodPressure: 이완기 혈압 (mm Hg)
SkinThickness: 삼두근 피부 주름 두께 (mm)
Insulin: 2시간 혈청 인슐린 (mu U/ml)
BMI: 체질량 지수 (weight in kg/(height in m)2)
DiabetesPedigreeFunction: 당뇨병 가계도 기능(가족력을 기반으로 당뇨병 가능성을 점수화하는 기능)
Age: 나이 (years)
Outcome: Class variable (당뇨병이 없으면 0, 당뇨병이 있으면 1)

 Target 변수가 Outcome 이네요. 파일 위젯으로 가서 수정하거나, 

Select Columns widget에서 Fratures있는 Outcome를 (1) Ignores > (2) Target로 옮깁니다.

 3. Feature Statistics Widget을 이용하여 데이터를 살펴봅니다.

데이터에는 일부 누락된 값(인슐린 = 0 참조)이 있습니다. 이상적으로는 이 0 값을 해당 기능의 평균 값으로 바꿀 수 있지만 지금은 건너뛰겠습니다.

4. Heat Map Widget을 이용하여 상관관계를 인사잇합니다.
더 밝은 색상은 더 많은 상관 관계를 나타냅니다.

5. 2개의 변수간의 관계는 Sieve Diagram Widget을 이용합니다.

나이가 많은 사람이 적은 사람보다 기대값(9%)보다 관측값(14%)이 많음을 알 수 있으며 p-Value가 0.0이하임으로 차이가 있다고 볼 수 있습니다. 

6. 데이터 세트 준비(분할 및 정규화)
  기계 학습 알고리즘을 사용할 때 우리는 항상 데이터를 훈련 세트와 테스트 세트로 분할해야 합니다. 모델을 훈련시키기 위해 750개의 레코드를 사용하여 교차검증을 할 것입니다. 테스트를 위해 18개의 레코드를 사용할 것입니다. [파이썬으로는 학습+시험+체크 : 3단계, 오렌지는 (학습=교차=750)+ (시험=18) : 2단계]
6.1 Preprocess

6.2 Data Sampler

7. 로지스틱 회귀라는 학습 모델을 사용할 것입니다. 오렌지의 캔바스를 아래와 같이 구성합니다.

8. Test and Score Widget을 열어 교차검증방식으로 750개의 데이터를 학습하여 AUC = 0.822을 확인하고, 

계속하여 Test 데이터(18개)를 적용하여 AUC = 0.833을 확인 할 수 있습니니다. 일부 데이터가 "0" 임을 묵과 하였음.

9. 그리고 Data Table에서 18개의 결과를 확인 할 수 있습니다. 헤더를 드래그&드롭하여 재배치 할 수 있습니다.

10. Sieve Diagram에서 Glucose 와 BloodPressure 의 상관관계를 살펴보면


Outcome = 1일대 Glucose가 촘촘해지면서 색상이 진해진다.  관측치가 기대치보다 많다. 이부분은 충분히 이해가 가는데, BloodPresure는 커져도 Outcome=1일 때 촘촘 함이 덜하다. 상관관계가 덜하다고 판단되는데,  파이썬 분석에서는 (-)인 것으로 해석(이 부분은 저의 공부가 부족하여 저도 잘 이해를 못하겠습니다.)











Delphi MAC에서 DataBase 연결

1. LiveBinding 나타나게 하기
Tools > Options > Livebinding > Options 에서
Display Livebindings wizard in context Menu 를 체크해준다.

2. 라이브러리 패스 설정은 platform 마다 해주어야한다.


델파이의 부활(Antigravity와의 만남)?

 델파이 프로그램을 사용하여 개인적으로 필요한 프로그램을 생성해 왔는데, 얼마전부터 파이썬으로 옮겨갔다.  그런데 Google 의 Antigravity를 만나고 나서 델파이에 대한 미련을 버리지 못해  제미나이가 Delphi이에 대한 학습도 엄청 했을...