티스토리 뷰
Logistic Regression
독립변수의의 선형 결합을 이용하여 사건의 발생 가능성을 예측할 때 사용되는 통계기법
로지스틱 회귀의 목적은 종속변수와 독립변수간의 관계를 구체적인 함수로 나타내어 향후 예측 모델에 사용하는 것이다.
독립변수의 선형 결합을 이용하여 사건의 발생가능성을 예측하는 통계적 기법을 활용한것
(일어날 확률/일어나지 않을 확률)
결과적으로 로지스틱 회귀의 y값은 0~1 사이의 확률값이 된다.
종속변수가 범주형 데이터를 대상으로 하며 입력 데이터가 주어졌을 때 해당 데이터의 결과가 특정 분류로 나뉘기 때문에 일종의 classification 기법으로 볼 수 있다.
logistic regression 은 데이터가 두 집단(0또는 1)로 나뉘어져 있는 경우에 사용된다.
Python Logistic Regression Example
Titanic data 에서 테스트 데이터 / 트레이닝 데이터를 만든다.
sklearn.model_selection 을 사용하여 2:8 비율로 분류
Scikit-Learn 의 model_selection 서브 패키지는 교차 검증을 위해 전체 데이터 셋에서 트레이닝용 데이터나 테스트용 데이터를 분리해 내는 여러가지 방법을 제공한다.
- train_test_split : data 를 train set 과 test set 으로 단순하게 분리.
train_x : 분류에 사용될 attributes - 탑승자의 정보 / train_y : 분류결과값 (0또는 1 / Survived or Not)
from sklearn.model_selection import train_test_split #test(valid)/train 을 2:8 로 randomly select train, valid = train_test_split(titanic, test_size=0.2, random_state=0) #train/valid set 완성! train_y=train['survived'] train_x=train.drop(['survived'], axis=1) valid_y=valid['survived'] valid_x=valid.drop(['survived'],axis=1)
sklearn.linear_model LogisticRegression 을 사용하여 분류
from sklearn.linear_model import LogisticRegression lr = LogisticRegression(C=1000.0, random_state=0) lr.fit(train_x, train_y) pred_y = lr.predict(valid_x)
C : Inverse of regularization strength; must be a positive float. Like in support vector machines, smaller values specify stronger regularization.
random_state : random 데이터 생성 시 seed of random number
fit(train_x, train_y) : Fit the model according to the given training data
training 데이터로 학습시키기
predict(valid_x) : Predict class labels for samples in X
valid_x 값을 사용하여 학습한 분류기에 y 값을 예측하게 한다.프린트해보면 0 1 0 0 1 과 같이 생존률을 예측한 값들이 나온다.
print("Misclassification samples : %d" %(valid_y != pred_y).sum())
제대로 분류되지 않은 데이터를 valid_y 와 pred_y 를 비교하여 단순 count 한다.
from sklearn.metrics import precision_score, recall_score, f1_score from sklearn.metrics import accuracy_score print("accuracy: %.2f" %accuracy_score(valid_y, pred_y)) print("Precision : %.3f" % precision_score(valid_y, pred_y)) print("Recall : %.3f" % recall_score(valid_y, pred_y)) print("F1 : %.3f" % f1_score(valid_y, pred_y))
accuracy, Precision, Recall, F1 값을 프린트
약 77% 정도로 분류가 성공했음을 알 수 있음
참고 : https://ko.wikipedia.org/wiki/%EB%A1%9C%EC%A7%80%EC%8A%A4%ED%8B%B1_%ED%9A%8C%EA%B7%80
'Data Science' 카테고리의 다른 글
[Python] T-Test and P-Value (0) | 2018.06.08 |
---|---|
one-hot-encoding (0) | 2018.05.12 |
pandas/numpy (0) | 2018.04.14 |
[Python] Pandas module (0) | 2018.03.26 |