[PYTHON - 머신러닝_로지스틱선형회귀]★로지스틱 선형회귀★상관관계★원-핫 인코딩★정확도★
1. 로지스틱 회귀
==> 로지스틱 회귀 또한 선형 회귀처럼 기본 분석 모델이다.
==>선형 회귀 분석은 연속된 변수를 예측하는 반면 , 로지스틱 회귀 분석은 Yes/No처럼 2가지로 나뉘는 분류 문제를 다룬다.
==> 실제 이진분류가 필요한 상황이 많기 때문에 2가지 범주를 구분하는 간단한 예측에 유용하며 딥러닝의 기본지식이다.
장점 : 선형 회귀분석만큼 구현에 용이 , 계수(기울기)를 사용해 각 변수의 중요성을 쉽게 파악가능
단점 : 선형 회귀분석을 근간으로 하고 있기 때문에, 선형 관계가 아닌 데이터에 대한 예측력이 떨어진다.
Yes/No, True/False와 같은 2가지 범주로 나뉜 값을 예측하는데 사용
분류 문제에 있어서 기준선으로 자주 활용
3. 상관관계
data.corr() # 상관관계 출력

==> 상관관계는 숫자가 아니라면 계산이 안된다
==> 문자형 변수들을 제거하고 상관관계를 보여준다.
==>0에 가까울수록 상관관계가 없는 것이고, 1 혹은 -1에 가까울수록 상관관계가 크다.
==>양수는 정수적 상관, A가 증가하면 B도 함께 증가
==>음수는 부적 상관으로 A가 증가할수록 B가 감소하는 경우이다.
==>가장 큰 상관관계를 보이는 부분은 Parch(함께 탑승한 부모 및 자녀의 수)와 SibSp(함께 탑승한 형제 및 배우자 수)이다. ==> 0.414542
#0.2 이하 : 상관관계가 거의 없음
#0.2 ~ 0.4 : 낮은 상관관계
#0.4 ~ 0.6 : 중간 수준의 상관관계
#0.6 ~ 0.8 : 높은 상관관계
#0.8 이상 : 매우 높은 상관관계
sns.heatmap(data.corr())
plt.show()

sns.heatmap(data.corr() , cmap = 'coolwarm')
plt.show()
#히트맵에 대한 0을 기준으로 대칭이 되는 색상 배열 사용

3. 전처리: 범주형 변수 변환하기(더미 변수와 원-핫 인코딩)
==>파이썬은 자료형이 object인 변수들 , 데이터가 숫자가 아닌 문자인 변수를 이해 못한다.
EX) object형을 숫자로 대체하는 방법, 계절의 경우 봄,여름,가을,겨울을 각각 1,2,3,4로 변환
==> BUT. 상대적인 서열로 인식의 단점 존재
EX-02) 기존의 하나던 컬럼을 MALE과 FEMALE 컬럼으로 분리


==> 문자로 된 값을 숫자화하여 이해할 수 있게 한다. ==> 더미 변수를 만든다 or 원-핫 인코딩이라 한다.
==> 고유값
data['Name'].nunique()
==> 889 ==> 고윳값이 수백 가지이므로 더미 변수로 변환시키기엔 컬럼이 너무 많다. ==> 이름에 따라 사망 여부가 갈린다고 추론하기엔 어렵다. ==> 삭제
data['Sex'].nunique()
==> 2
data['Ticket'].nunique()
==> 680 ==> 고윳값 수백가지 ==> 티켓에 따른 사망률 추론 어려우므로 삭제
data['Embarked'].nunique()
==> 3
pd.get_dummies(data, columns = ['Sex' , 'Embarked'])
==> 더미변수 화

==> 남자/여자 (0,1)로 구분
==> Embarked ==> 고윳값 3개
pd.get_dummies(data, columns = ['Sex' , 'Embarked'] , drop_first=True)

==> drop_first = True로 더미변수의 data를 줄인다.
4. 모델링 및 예측하기
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
X = data.drop('Survived' , axis = 1) #데이터셋에서 종속변수 제거
y = data['Survived'] #종속변수 저장
X_train ,X_test , y_train , y_test = train_test_split(X , y, test_size= 0.2 , random_state= 100)
model = LogisticRegression() #로지스틱 회귀 모델 생성
model.fit(X_train , y_train) #모델 학습
pred = model.predict(X_test) #예측
5. 예측 모델 평가하기
==> 이진 분류의 경우 RMSE는 적합하지 않다.
https://knowallworld.tistory.com/371
[PYTHON - 머신러닝_선형회귀]★선형회귀★seaborn 타원만들기★모델 평가방법 RMSE , R**2★model.coef_(
1. 선형회귀 ==> 가장 기초적인 머신러닝 모델 ==> 여러가지 데이터를 연속형 변수인 목표 변수를 예측해 내는 것이 목적이다. ==> 몸무게, 나이 , BMI, 성별 등의 데이터를 활용하여 연속형 변수를
knowallworld.tistory.com
==> 평균 제곱 오차 ==> 실제값과 예측값 사이의 오차를 제곱한 뒤 이에 대한 평균 계산
==> 이진분류 평가 지표로는 정확도, 오차행렬 ,정밀도 , 재현율 , F1-Score , 민감도 , 특이도, AUC 등이 있다.
6. 예측 모델 평가하기_ 정확도
from sklearn.metrics import accuracy_score #정확도 라이브러리 임포트
accuracy_score(y_test , pred) # 실제값과 예측값으로 정확도 계산
0.7808988764044944
==> 78%의 정확도 ==> 정확도의 좋고 나쁨을 결정하는 절대적인 지표는 없다.
==> 고윳값이 10개라면 상대적으로 낮은 정확도도 용인 될 수 있다.
==> 고윳값이 2개인 이진분류에서도 각각의 비율이 어떠한가에 따라 평가 기준이 달라진다.
==> ex) 0이 95%이고, 1이 5%로 구성된 이진분류라면, 정확도가 90%라고 해도 좋은 값으로 볼 수 없다.
==> 왜냐하면 머신러닝 모델 없이 모든 값을 0으로 예측한다면 정확도는 95%라고 할 수 도 있다.
==> 고윳값의 비율이 50:50 이라면 80% 이상의 정확도 정도면 나쁘지 않고, 90% 이상의 정확도를 얻어야 괜찮은 결과로 보는 편이다.
==> XGBoost 나 LightGBM을 사용하면 더 좋은 정확도를 얻을 수 있다.
pd.Series(model.coef_[0] , index = X.columns)

==> 로지스틱 회귀 분석 결과 Pclass의 값이 커질수록 생존률이 낮아진다.
7. 피처 엔지니어링
==> 기존 데이터를 손보아 더 나은 변수를 만드는 기법
==> 더미변수를 만드는 일도 일종의 피처 엔지니어링이다.
==> 피처란? 독립변수의 다른 표현
==> 선형 회귀 분석과 로지스틱 회귀 분석을 선형 모델이라고 하는데, 선형 모델에서는 다중공선성 문제를 주의해야한다.
==> 다중공선성은 독립변수 사이에 상관관계가 높은 때에 발생하는 문제
==> ex) A와 B의 상관관계가 매우 높다면, y가 증가한 이유가 A때문인지 B때문인지 명확하지 않다.
==> 다중공선성 문제는 상관관계가 높은 변수 중 하나를 제거하거나, 둘을 포괄하는 새로운 변수를 만들거나 , PCA와 같은 방법으로 차원 축소를 수행해야한다.

==> Parch와 SibSp 간의 상관관계가 높다. ==> 이를 새로운 변수로 생성
data['family'] = data['SibSp'] + data['Parch'] #SibSp와 Parch 변수 합치기
data.drop(['SibSp' , 'Parch'] , axis = 1 , inplace =True) #Sibsp , Parch 변수 삭제
data.head()

X = data.drop('Survived' , axis = 1) #데이터셋에서 종속변수 제거
y = data['Survived'] #종속변수 저장
X_train ,X_test , y_train , y_test = train_test_split(X , y, test_size= 0.2 , random_state= 100)
model = LogisticRegression() #로지스틱 회귀 모델 생성
model.fit(X_train , y_train) #모델 학습
pred = model.predict(X_test) #예측
accuracy_score(y_test , pred) # 실제값과 예측값으로 정확도 계산
0.7921348314606742
==> 독립변수의 수가 하나 줄었지만 기존보다 정확도가 0.012정도 높아졌다.
==> 모델링은 한 번만에 끝내는 것이 아닌 다양한 시도를 해가며 재반복해 더 나은 결과물을 얻어내가는 과정
8. 로지스틱 회귀 분석 공식

출처 : 데싸노트의 실전에서 통하는 머신러닝
(Golden Rabbit , 저자 : 권시현)
※혼자 공부용