CSV 파일을 읽어 데이터프레임으로 변환하는 데 사용된다.
데이터프레임의 형식, 행과 열의 개수, 데이터 타입 등의 요약 정보를 텍스트로 보여준다.
long_hair: 긴 머리
forehead_width_cm: 이마 너비 (cm)
forehead_height_cm: 이마 높이 (cm)
nose_wide: 코가 넓음
nose_long: 코가 길음
lips_thin: 얇은 입술
distance_nose_to_lip_long: 코와 입술 사이의 거리
gender: 성별
df['gender']: 데이터프레임 df의 'gender' 열을 선택한다.
value_counts(): 각 고유 값의 개수를 계산한다. 이 경우, 'Male'과 'Female'의 개수를 계산한다.
value_counts().plot.bar(): 값 개수를 막대 그래프로 시각화한다.
이 막대 그래프는 df 데이터프레임의 'gender' 열에 있는 'Male'과 'Female'의 개수를 보여준다.
x축은 성별(Female, Male)을 나타내고, y축은 각 성별의 개수를 나타낸다.
그래프를 통해 데이터셋에 포함된 남성과 여성의 수가 거의 비슷함을 알 수 있다.
groupby() 함수는 pandas 라이브러리에서 데이터프레임의 특정 열을 기준으로 데이터를 그룹화할 때 사용되는 강력한 함수다. 이 함수는 데이터 분석에서 매우 유용하며, 그룹별로 집계, 변환, 필터링 등을 수행할 수 있다.
주요 기능
그룹화: 데이터프레임의 특정 열을 기준으로 데이터를 그룹화한다.
집계: 그룹별로 합계, 평균, 개수 등의 집계 연산을 수행한다.
변환: 그룹별로 데이터를 변환할 수 있다.
필터링: 특정 조건을 만족하는 그룹만을 선택할 수 있다.
df['long_hair']: 데이터프레임 df의 'long_hair' 열을 선택한다.
groupby(df['gender']): 'gender' 열을 기준으로 그룹화한다.
mean(): 각 그룹의 평균 값을 계산한다.
round(2): 계산된 평균 값을 소수점 둘째 자리까지 반올림한다.
long_cnt.plot.bar(): long_cnt 데이터의 값을 막대 그래프로 시각화한다.
plt.show(): 그래프를 화면에 표시한다.
plt.text(): 그래프에 텍스트를 추가하는 함수다. 첫 번째 인자는 x 좌표, 두 번째 인자는 y 좌표, 세 번째 인자는 텍스트 내용을 나타낸다.
va='center', ha='center': 텍스트를 가로 및 세로 방향으로 중앙 정렬한다.
이 막대 그래프는 성별에 따른 긴 머리의 평균 비율을 보여준다.
x축은 성별(Female, Male)을 나타내고, y축은 각 성별 그룹 내에서 긴 머리를 가진 사람들의 평균 비율을 나타낸다.
그래프 위에 표시된 텍스트는 각 막대의 정확한 값을 나타낸다.
원-핫 인코딩은 범주형 데이터를 수치형 데이터로 변환하는 기법이다.
각 범주를 이진 벡터로 변환하며, 벡터의 길이는 원래 범주의 개수와 동일하다.
원-핫 인코딩을 사용하면 범주형 변수 간의 순서나 크기 비교를 피할 수 있어 머신 러닝 모델의 성능을 향상시킬 수 있다.
pd.get_dummies(df, columns=['gender'], dtype=int, drop_first=True): pandas의 get_dummies 함수를 사용하여 'gender' 열을 원-핫 인코딩한다.
df: 원본 데이터프레임.
columns=['gender']: 원-핫 인코딩할 열을 지정한다. 여기서는 'gender' 열이다.
dtype=int: 생성된 더미 변수의 데이터 타입을 정수형으로 설정한다.
drop_first=True: 첫 번째 범주를 제거하여 다중 공선성을 방지한다.
변환 결과
원-핫 인코딩 후, 'gender' 열은 'gender_Male'이라는 새로운 열로 변환된다. 'Female'은 [0]으로, 'Male'은 [1]로 인코딩된다.
gender_Male 열이 새로 생성되었으며, 원래의 'gender' 열은 제거되었다.
'gender_Male' 열에서 값이 1인 경우 해당 행은 'Male'을 의미하며, 값이 0인 경우 'Female'을 의미한다.
df_onehot.corr(): 데이터프레임 df_onehot의 열 간의 상관계수를 계산한다. 상관계수는 Pearson 상관계수를 사용한다.
round(2): 계산된 상관계수를 소수점 둘째 자리까지 반올림한다.
이 코드는 데이터프레임의 열 간의 상관관계를 계산하고 이를 소수점 두 자리로 반올림하여 표시한다. 상관계수는 각 열 간의 관계를 0과 1 사이의 값으로 나타내며, 값이 클수록 두 열 간의 관계가 강하다는 것을 의미한다.
df_onehot.corr(): 데이터프레임 df_onehot의 열 간의 상관계수를 계산한다. 상관계수는 Pearson 상관계수를 사용한다.
round(2): 계산된 상관계수를 소수점 둘째 자리까지 반올림한다.
sns.heatmap(corr, annot=True): 상관계수 행렬 corr을 히트맵으로 시각화한다. annot=True는 각 셀에 상관계수 값을 표시한다.
plt.show(): 생성된 히트맵을 화면에 출력한다.
히트맵은 상관계수 행렬을 색상으로 시각화한 것이다. 각 셀의 색상은 상관계수 값에 따라 달라지며, 색상바는 0에서 1까지의 범위를 나타낸다. 셀 안의 숫자는 상관계수 값을 의미한다.
색상이 밝을수록 상관계수가 높음을 의미하고, 색상이 어두울수록 상관계수가 낮음을 의미한다.
예를 들어, nose_wide와 gender_Male 간의 상관계수는 0.76으로, 이 셀은 밝은 색으로 표시된다.
반면, long_hair와 gender_Male 간의 상관계수는 -0.01로, 이 셀은 어두운 색으로 표시된다.
독립 변수 (X): 예측 모델에 입력으로 사용될 특성들로 구성된 데이터. 각 행은 하나의 샘플을 나타내며, 각 열은 하나의 특성을 나타낸다.
종속 변수 (Y): 예측 모델의 목표 값으로 사용될 데이터. 각 행은 독립 변수에 해당하는 샘플의 성별을 나타낸다.
이 코드는 독립 변수와 종속 변수를 설정하여 머신러닝 모델에 사용할 데이터를 준비한다.
df_onehot[['forehead_width_cm', 'forehead_height_cm', 'nose_wide', 'nose_long', 'lips_thin', 'distance_nose_to_lip_long']]: 원-핫 인코딩된 데이터프레임 df_onehot에서 특정 열(피쳐)들을 선택하여 독립 변수 x를 생성한다.
여기서
forehead_width_cm: 이마의 너비, forehead_height_cm: 이마의 높이, nose_wide: 코의 너비, nose_long: 코의 길이, lips_thin: 입술의 얇음 여부, distance_nose_to_lip_long: 코와 입술 사이의 거리
가 피쳐로 선택되었다.
df_onehot['gender_Male']: 원-핫 인코딩된 데이터프레임 df_onehot에서 'gender_Male' 열을 선택하여 종속 변수 y를 생성한다. 이 변수는 성별을 나타내며, 남성일 경우 1, 여성일 경우 0이다.
display(x): 독립 변수 x를 출력하여 데이터의 형태를 확인한다.
display(y): 종속 변수 y를 출력하여 데이터의 형태를 확인한다.
사이킷런(scikit-learn)은 파이썬에서 가장 널리 사용되는 머신러닝 라이브러리 중 하나로, 다양한 머신러닝 알고리즘과 도구를 제공한다. 사이킷런은 간단한 API와 강력한 기능을 결합하여 데이터 분석 및 모델 구축을 쉽게 할 수 있도록 도와준다.
다양한 알고리즘:
사이킷런은 회귀, 분류, 클러스터링, 차원 축소, 모델 선택 및 전처리 등 다양한 머신러닝 알고리즘을 제공한다.
사용자 친화적:
간단하고 일관된 인터페이스를 제공하여, 데이터 과학자와 개발자들이 쉽게 사용할 수 있다.
풍부한 유틸리티:
데이터 전처리, 교차 검증, 그리드 서치, 모델 평가 등 많은 유용한 유틸리티 기능을 포함하고 있다.
확장 가능:
사이킷런은 다른 파이썬 라이브러리와 잘 통합되며, 필요에 따라 확장할 수 있다.
데이터 전처리 (Preprocessing):
StandardScaler, MinMaxScaler: 데이터 스케일링
LabelEncoder, OneHotEncoder: 범주형 데이터 인코딩
모델 선택 및 평가 (Model Selection & Evaluation):
train_test_split: 데이터를 학습/검증 세트로 분할
cross_val_score: 교차 검증
GridSearchCV, RandomizedSearchCV: 하이퍼파라미터 튜닝
회귀 (Regression):
LinearRegression, Ridge, Lasso: 선형 회귀 모델
DecisionTreeRegressor, RandomForestRegressor: 트리 기반 회귀 모델
분류 (Classification):
LogisticRegression, KNeighborsClassifier, SVC: 다양한 분류 모델
DecisionTreeClassifier, RandomForestClassifier, GradientBoostingClassifier: 트리 기반 분류 모델
클러스터링 (Clustering):
KMeans, DBSCAN, AgglomerativeClustering: 다양한 클러스터링 알고리즘
차원 축소 (Dimensionality Reduction):
PCA, KernelPCA, LDA: 차원 축소 기법
이 코드는 전체 데이터를 학습 데이터와 테스트 데이터로 분할하여 모델 학습 및 평가에 사용할 수 있도록 한다.
train_test_split 함수를 사용하기 위해 sklearn.model_selection 모듈에서 임포트한다. 이 함수는 데이터를 학습 데이터와 테스트 데이터로 나누는 데 사용된다.
train_test_split(x, y, test_size=0.3): x와 y 데이터를 학습 데이터와 테스트 데이터로 분할한다. 여기서 test_size=0.3은 전체 데이터의 30%를 테스트 데이터로 사용하고, 나머지 70%를 학습 데이터로 사용함을 의미한다.
X_train: 학습 데이터의 독립 변수
X_test: 테스트 데이터의 독립 변수
Y_train: 학습 데이터의 종속 변수
Y_test: 테스트 데이터의 종속 변수
train_test_split 함수는 데이터를 무작위로 섞은 후 지정된 비율에 따라 학습 데이터와 테스트 데이터로 나눈다. 이 과정을 통해 모델의 성능을 보다 정확하게 평가할 수 있다.
학습 데이터(X_train, Y_train)는 모델을 학습시키는 데 사용되며, 테스트 데이터(X_test, Y_test)는 모델의 성능을 검증하는 데 사용된다.
출력된 Y_test는 테스트 데이터의 실제 레이블을 보여준다. 이를 통해 모델의 예측 결과와 비교하여 모델의 정확도를 평가할 수 있다.
이 코드는 사이킷런의 linear_model 모듈에서 LinearRegression 클래스를 임포트한다.
이 클래스는 선형 회귀 모델을 구현한 것이다.
LinearRegression() 클래스를 사용하여 선형 회귀 모델 객체를 생성하고, 이를 Lin_model 변수에 저장한다. 이 객체를 사용하여 모델을 학습하고 예측할 수 있다.
fit 메소드를 사용하여 모델을 훈련시킨다.
X_train.values는 훈련 데이터의 독립 변수(특성)들이다.
Y_train.values는 훈련 데이터의 종속 변수(타겟)이다.
predict 메소드를 사용하여 테스트 데이터에 대한 예측을 수행한다.
X_test.values는 테스트 데이터의 독립 변수(특성)들이다.
predict_result 변수에 예측 결과를 저장한다.
이 코드는 사이킷런의 linear_model 모듈에서 LogisticRegression 클래스를 임포트한다.
로지스틱 회귀는 이진 분류 문제를 해결하기 위해 널리 사용되는 알고리즘이다.
LogisticRegression() 클래스를 사용하여 로지스틱 회귀 모델 객체를 생성하고, 이를 LR_model 변수에 저장한다.
fit 메소드를 사용하여 모델을 훈련시킨다.
X_train.values는 훈련 데이터의 독립 변수(특성)들이다.
Y_train.values는 훈련 데이터의 종속 변수(타겟)이다.
predict 메소드를 사용하여 테스트 데이터에 대한 예측을 수행한다.
X_test.values는 테스트 데이터의 독립 변수(특성)들이다.
predict_result 변수에 예측 결과를 저장한다.
이 코드는 사이킷런의 metrics 모듈에서accuracy_score 함수를 임포트한다.
accuracy_score 함수는 분류 모델의 예측 정확도를 계산하는 데 사용된다.
accuracy_score 함수는 실제 값(Y_test)과 예측 값(predict_result)을 비교하여 정확도를 계산한다.
Y_test는 테스트 데이터의 실제 성별(정답)이다.
predict_result는 모델이 예측한 성별이다.
함수는 정확도를 소수점 형태로 반환한다. 여기서는 0.9626915389740173, 즉 약 96.27%의 정확도를 보여준다.
이 코드는 LogisticRegression 클래스를 사용하여 새로운 데이터에 대해 성별을 예측하는 과정을 보여준다.
choi는 새로운 데이터로, 다음과 같은 특징을 가진다:
forehead_width_cm: 16.3
forehead_height_cm: 6.0
nose_wide: 0
nose_long: 0
lips_thin: 0
distance_nose_to_lip_long: 0
predict_proba 메소드는 주어진 데이터에 대한 각 클래스 (여기서는 남성과 여성) 별로 예측 확률을 반환한다.
결과는 배열 형태로 반환되며, 각 클래스에 대한 확률을 포함한다. 예를 들어, array([[0.99187171, 0.00812829]])는 주어진 데이터가 여성일 확률이 약 99.19%, 남성일 확률이 약 0.81%임을 나타낸다.
array([[0.99187171, 0.00812829]]):
첫 번째 값(0.99187171)은 예측된 데이터가 '여성'일 확률이다.
두 번째 값(0.00812829)은 예측된 데이터가 '남성'일 확률이다.