# 초기환경셋팅 (진행후 주석처리함) # !pip install -r requirements.txt # 처음 불러오기 import pandas as pd data = pd.read_csv('./Dataset/Dataset_03.csv') # q1문제를 위한 원본 복사 q1 = data.copy() # 이마폭,이마높이의 비율에 대한 변수 생성 q1['forehead_ratio'] = q1['forehead_width_cm']/q1['forehead_height_cm'] # 평균, 표준편차 단위 구하기 mean = q1['forehead_ratio'].mean() std = q1['forehead_ratio'].std() # 평균으로부터 3 표준편차(std) 밖 구간 # -3std <---me|an---> +3std up3std = mean + (3 * std) # 상위 down3std = mean - (3*std) # 하위 # 구간 내 (이상치) 갯수 q1['forehead_ratio']< down3std q1['forehead_ratio']> up3std (q1['forehead_ratio']< down3std ) | (q1['forehead_ratio']> up3std) # or out = (q1['forehead_ratio']< down3std ) | (q1['forehead_ratio']> up3std) out.sum() print(f'outlier의 갯수는 {out.sum()}') # q2문제를 위한 원본 복사 q2 = q1.copy() # 성별에 따른 forehead_ratio평균(위에 만든변수)구하기 q2.gender.unique() # array(['Male', 'Female'], dtype=object) q2[q2.gender=='Male'] q2[q2.gender=='Male']['forehead_ratio'] group_m = q2[q2.gender=='Male']['forehead_ratio'] # 남자그룹별 평균 q2[q2.gender=='Female'] q2[q2.gender=='Female']['forehead_ratio'] group_f = q2[q2.gender=='Female']['forehead_ratio'] # 여자그룹별 평균 # 통계검정을 위한 함수 불러오기 from scipy.stats import ttest_ind , bartlett # ttest_ind 이표본T검정 = 독립성 # ttest_rel 이표본T검정 = 관계성 # bartlett 등분산 검정용 # 등분산검정 (등분산이다 vs 등분산이 아니다(이분산이다)) bartlett(group_m, group_f) # T-Test검정 ttest_ind(group_m, group_f, equal_var=False) # equal_var = True 등분산 # equal_var = False 이분산 q2_out = ttest_ind(group_m, group_f, equal_var=False) q2_out print(q2_out) # pvalue가 유의수준0.05보다 작다면 대립가설(등분산이 아니다 = 이분산이다) # pvalue=0.002718670239065719 이므로 이분산이다. # 검정통계량 구하기 q2_out.statistic print(f'검정통계량은 {q2_out.statistic:.3f}') # q3문제를 위한 원본 복사 q3 = data.copy() # 데이터셋 분리를 위한 함수 from sklearn.model_selection import train_test_split # 데이터셋 분리 train_test_split(q3, test_size=0.3, random_state=123) train, test = train_test_split(q3, test_size=0.3, random_state=123) # 데이터셋 분리후 확인 train # 3500 test # 1501 q3.info() # 5001 # len(q3), len(train), len(test) # 참고로 len()했을때 error 가 나오는데, # 이전 실수로 len = 이렇게 변수지정을 했기 때문에 그럽니다. # del len 한다음 len(train) 하니 정상적으로 출력되었습니다. # 7개변수 Feautres 정의 (label인 gender만 제외) features = train.columns.drop('gender') # 로지스틱회귀분석 함수 from sklearn.linear_model import LogisticRegression # 로지스틱회귀분석 모델 # model = LogisticRegression() # 조건추가 # 조건1. penalty = 'L2' # 조건2. Inverse of Regularization = 10000 # 조건3. solver = newton-cg # 조건4. seed(random_state) = 123 # 로지스틱 회귀분석 모델 with 위의 조건 model = LogisticRegression( C = 100000, solver='newton-cg', random_state=123 ) # 로지스틱 회귀분석 학습 model.fit(train[features], train.gender) # 로지스틱 회귀분석 예측값 pred = model.predict(test[features]) # (이건 그냥 추가가정) 참고로 만약 확률로 예측한다면? pred_pr = model.predict_proba(test[features]) # pred 와 pred_pr print(pred) # 각각 레이블로 예측 print(pred_pr) # 각각 확률이 구해짐 = 알파벳순 = 여기에서는 array[Female, Male] 순 # 로지스틱 회귀분석 결과 = 성능평가 모듈 함수 from sklearn.metrics import classification_report, precision_score # 성능평가 (실제값, 예측값) classification_report(test.gender, pred) print(classification_report(test.gender, pred)) # Male의 Precision 값은 ? print(f'Male의 Precision 값은 0.96입니다.')
손공부
# 초기설치
# !pip install -r requirements.txt
# 불러오기
import pandas as pd
data = pd.read_csv('./Dataset/Dataset_03.csv')
data.info()
############################ 1번문제를 위한 원본 복사
q1 = data.copy()
# 이마의 폭과 높이 사이의 비율 = 변수생성
q1['forehead_ratio'] = q1['forehead_width_cm'] / q1['forehead_height_cm']
# 이마의 폭과 높이 사이의 비율을 기준으로, 평균값과 표준편차 구하기
q1_mean = q1['forehead_ratio'].mean()
q1_std = q1['forehead_ratio'].std()
# 평균으로부터 3 표준편차 밖의 경우 구하기
up = q1_mean + (3 * q1_std)
down = q1_mean - (3 * q1_std)
# 3 표준편차 기준으로 이상치
q1['forehead_ratio'] < down
q1['forehead_ratio'] > up
(q1['forehead_ratio'] < down ) | (q1['forehead_ratio'] > up ) # or = 하나라도 적용되면
(q1['forehead_ratio'] < down ) | (q1['forehead_ratio'] > up ).sum()
((q1['forehead_ratio'] < down ) | (q1['forehead_ratio'] > up )).sum()
############################ 2번문제를 위한 원본 복사
q2 = q1.copy()
# 성별의 그룹내 갯수
q2.gender.unique() # array(['Male', 'Female'], dtype=object) --> 2개
# 성별에 따른 forehead_ratio평균 각각 그룹 구하기
q2[q2.gender=='Male']
q2[q2.gender=='Male']['forehead_ratio']
group_m = q2[q2.gender=='Male']['forehead_ratio'] # 남자그룹별 평균
q2[q2.gender=='Female']
q2[q2.gender=='Female']['forehead_ratio']
group_f = q2[q2.gender=='Female']['forehead_ratio'] # 여자그룹별 평균
# 그룹내 갯수가 2개면 t-test 검정
# 그룹내 갯수가 3개이상이면 ANOVA 검정 (2개일때 사용하기도함)
# 통계검정을 위한 함수 불러오기
from scipy.stats import ttest_ind , bartlett
# ttest_ind 이표본T검정 = 독립성
# ttest_rel 이표본T검정 = 관계성
# bartlett 등분산 검정용
# 여기에서는 이분산을 가정하고 있으나, 해당 조건이 주어지지 않을 때 등분산 검정부터 먼저 해야함.
# 검정을 위한 함수 불러오기
from scipy.stats import ttest_ind , bartlett
# ttest_ind 이표본T검정 = 독립성
# ttest_rel 이표본T검정 = 관계성
# bartlett 등분산 검정용
# 등분산검정 (등분산이다 vs 등분산이 아니다(이분산이다))
bartlett(group_m, group_f)
# T-Test검정
ttest_ind(group_m, group_f, equal_var=False)
# equal_var = True 등분산
# equal_var = False 이분산
q2_out = ttest_ind(group_m, group_f, equal_var=False)
q2_out
print(q2_out)
# pvalue가 유의수준0.05보다 작다면 대립가설(등분산이 아니다 = 이분산이다)
# pvalue=0.002718670239065719 이므로 이분산이다.
# 검정통계량 구하기
q2_out.statistic
print(f'검정통계량은 {q2_out.statistic:.3f}')
############################ 3번문제를 위한 원본 복사
q3 = data.copy()
# 데이터셋 분리를 위한 함수
from sklearn.model_selection import train_test_split
# 데이터셋 분리 조건
train_test_split(q3, test_size=0.3, random_state=123)
# 데이터셋 분리 진행
train, test = train_test_split(q3, test_size=0.3, random_state=123)
# 데이터셋 분리 후 확인
print(len(train),len(test),len(q3))
# 7개변수 Feautres 정의 (label인 gender만 제외)
features = train.columns.drop('gender')
# 로지스틱회귀분석 함수
from sklearn.linear_model import LogisticRegression
# 조건추가
# 조건1. penalty = 'L2'
# 조건2. Inverse of Regularization = 10000
# 조건3. solver = newton-cg
# 조건4. seed(random_state) = 123
# 위의 조건으로 로지스틱회귀분석 모델링
model = LogisticRegression(
C = 100000,
solver='newton-cg',
random_state=123
)
# 로지스틱 회귀분석 학습
model.fit(train[features], train.gender)
# 로지스틱 회귀분석 예측값
pred = model.predict(test[features])
# (이건 그냥 추가가정) 참고로 만약 확률로 예측한다면?
pred_pr = model.predict_proba(test[features])
# pred 와 pred_pr
print(pred) # 각각 레이블로 예측
print(pred_pr) # 각각 확률이 구해짐 = 알파벳순 = 여기에서는 array[Female, Male] 순
# 로지스틱 회귀분석 결과 = 성능평가 모듈 함수
from sklearn.metrics import classification_report, precision_score
# 성능평가 (실제값, 예측값)
classification_report(test.gender, pred)
print(classification_report(test.gender, pred))
# Male의 Precision 값은 ?
print(f'Male의 Precision 값은 0.96입니다.')
# 초기설치 및 불러오기
############################ 1번문제를 위한 원본 복사
# 이마의 폭과 높이 사이의 비율 = 변수생성
# 이마의 폭과 높이 사이의 비율을 기준으로, 평균값과 표준편차 구하기
# 평균으로부터 3 표준편차 밖의 경우 구하기
# 3 표준편차 기준으로 이상치
############################ 2번문제를 위한 원본 복사
# 성별의 그룹내 갯수
# 성별에 따른 forehead_ratio평균 각각 그룹 구하기
# 통계검정을 위한 함수 불러오기
# 여기에서는 이분산을 가정하고 있으나, 해당 조건이 주어지지 않을 때 등분산 검정부터 먼저 해야함.
# 검정을 위한 함수 불러오기
# 등분산검정 (등분산이다 vs 등분산이 아니다(이분산이다))
# T-Test검정
# T-Test검정결과
# 유의수준0.05보다 pvalue작다면 대립가설(등분산이 아니다 = 이분산이다)
# 검정통계량 구하기
############################ 3번문제를 위한 원본 복사
# 데이터셋 분리를 위한 함수
# 데이터셋 분리 조건
# 데이터셋 분리 진행
# 데이터셋 분리 후 확인
# 7개변수 Feautres 정의 (label인 gender만 제외)
# 로지스틱회귀분석 함수
# 조건추가
# 조건1. penalty = 'L2'
# 조건2. Inverse of Regularization = 10000
# 조건3. solver = newton-cg
# 조건4. seed(random_state) = 123
# 위의 조건으로 로지스틱회귀분석 모델링
# 로지스틱 회귀분석 학습
# 로지스틱 회귀분석 예측값
# (이건 그냥 추가가정) 참고로 만약 확률로 예측한다면?
# pred 와 pred_pr 의 차이?
# 각각 레이블로 예측 하는 것은 ?
# 각각 확률이 구해짐 = 알파벳순 = 여기에서는 array[Female, Male] 순으로 진행되는 것은?
# 로지스틱 회귀분석 결과 = 성능평가 모듈 함수
# 성능평가 (실제값, 예측값 확인)
# Male의 Precision 값은 ?