데이터 분석가 육성의 길--python 실전 분류 사례1

데이터 예처리와 특징 공정


코드 요약은 아래와 같으며, 구체적인 출력 정보는 보여 주지 않는다.
imoprt pandas as pd
data=pd.read_csv('D:\Tianic\Train.csv')
data.info()
data.describe()
위 데이터는 모두 12개의 변수 수치 변수 7개: int64(PassengerID, Survived, Pclass, SibSp, Parch) - 891 float64(Age - 714, Fare - 891) 속성 변수 5개: object((Name, Sex, Ticket) - 891, Cabin - 204, Embarked - 889)로 상기 변수에 대해 간략하게 분석한다.

- 초기 분석:


맞아요. 수치 변수: Passenger ID - 사용할 수 없어요. Survived - 생존율, label Pclass - 사회 경제적 지위로서, 사용할 수 있어요. Sib Sp - 배 위의 형제자매나 배우자의 수, Parch - 배 위의 부모나 아이의 수, 사용할 수 있어요(age와 관련이 있어요?)Age – 사용할 수 있지만 그 수량은 891도 안 되고 완전하지 않습니다. Fare – 선표 가격을 보충해야 합니다. 속성 변수에 대한 변수를 얻을 수 있습니다. Name - 모든 사람의 이름에 Mr, Mrs, Miss가 포함되어 있기 때문에 사용할 수 있습니다. Mr, Mrs, Miss를 추출하여 인코딩할 수 있습니다. Sex - 이 속성은 매우 중요하고 사용할 수 있습니다. 인코딩을 해야 합니다. Carbin이 필요합니다. - 쓸모가 있을 수 있지만 수량이 너무 적으니 아픔을 참으며 버리세요. Embarked - 승선지점, 이거,아주 작은 용도일 수도 있어요. Ticket - 배표 번호, 안 돼요.

- 재분석:


수치 변수 중 Survived, Pclass, SibSp, Parch, Age, Fare는 우리가 필요로 하는 특징 변수로 선택했는데 그 중에서 Age는 보완이 필요합니다. 어떻게 보완합니까?가장 간단한 방법, 균일치, 중위수 채우기, 하지만 비교적 큰 오차가 생길 수 있는 좋은 방법?다른 변수로 부족한 변수의 값을 추정하면 앞의 R 언어 데이터 예처리에서도 말했듯이 포켓 트리를 채우는 것과 같다.https://blog.csdn.net/lulujiang1996/article/details/78808577상대적으로 오차가 적다.속성 변수 중 Name, Sex, Embarked는 우리가 필요로 하는 특징 변수로 선택하지만 인코딩이 필요합니다. 어떻게 인코딩합니까?-인코딩은 수치화Name에 대해 Mr, Mrs, Miss 세 가지 상태가 있는데 가장 직접적인 방법은 0, 1, 2로 인코딩하는 것이다. 그러나 거리 각도에서 볼 때 Mr와 Mrs의 거리는 Mr와 Miss의 거리보다 작아서 적합하지 않기 때문에 그들을 평균적인 세 가지 상태로 간주하고 방법을 취해야 한다. - one-hot 인코딩, 즉 100010001로 Mr를 표시하고 Mrs, Miss는 Sex에 대해 0, 1로 표시할 수 있고 one-hot 인코딩으로 표시할 수도 있다. 00, 01은 Embarked에 대해그것은 단지 세 개의 상태 변수만 있고, 원-hot 인코딩만 하면 된다. 100010001

– 재분석:


수치 변수에 대해 우리는 통상적으로 귀일화 처리를 하고 수렴 속도를 가속화해야 한다(결정 트리와 같은 알고리즘에 적합하지 않다). 그래, Pclass,Fare,Sibsp,Parch,Age는 귀일화 처리를 하고 Survived는 목표 변수인 label 아래의 코드는 상기 설명과 약간 일치하지만 읽기에 영향을 주지 않는다.
#      

data.drop(['PassengerId','Ticket'],axis=1,inplace=True)  

#  Embarked    

data.loc[data.Embarked.isnull(),'Embarked']='S'  

#one-hot    

from sklearn.preprocessing import OneHotEncoder  

from sklearn.preprocessing import LabelEncoder  

#ohe_pclass=OneHotEncoder(sparse=False).fit(data[['Pclass']])  

#Pclass_ohe=ohe_pclass.transform(data[['Pclass']])  

le_sex=LabelEncoder().fit(data['Sex'])  

Sex_label=le_sex.transform(data['Sex'])  

ohe_sex=OneHotEncoder(sparse=False).fit(Sex_label.reshape(-1,1))  

Sex_ohe=ohe_sex.transform(Sex_label.reshape(-1,1))  

le_embarked=LabelEncoder().fit(data['Embarked'])  

Embarked_label=le_embarked.transform(data['Embarked'])  

ohe_embarked=OneHotEncoder(sparse=False).fit(Embarked_label.reshape(-1,1))  

Embarked_ohe=ohe_embarked.transform(Embarked_label.reshape(-1,1))  

def replace_name(x):  

    if 'Mrs' in x:  

       return 'Mrs'  

    elif 'Mr' in x:  

        return 'Mr'  

    else:  

        return 'Miss'  

data['Name']=data['Name'].map(lambda x:replace_name(x))  

le_name=LabelEncoder().fit(data['Name'])  

Name_label=le_name.transform(data['Name'])  

ohe_name=OneHotEncoder(sparse=False).fit(Name_label.reshape(-1,1))  

Name_ohe=ohe_name.transform(Name_label.reshape(-1,1))  

data['Sex_0']=Sex_ohe[:,0]  

data['Sex_1']=Sex_ohe[:,1]  

data['Embarked_0']=Embarked_ohe[:,0]  

data['Embarked_1']=Embarked_ohe[:,1]  

data['Embarked_2']=Embarked_ohe[:,2]  

data['Name_0']=Name_ohe[:,0]  

data['Name_1']=Name_ohe[:,1]  

data['Name_2']=Name_ohe[:,2]  

#       

from sklearn.preprocessing import StandardScaler  

Pclass_scale=StandardScaler().fit(data['Pclass'])  

data['Pclass_scaled']=StandardScaler().fit_transform(data['Pclass'].reshape(-1,1),Pclass_scale)  

Fare_scale=StandardScaler().fit(data['Fare'])  

data['Fare_scaled']=StandardScaler().fit_transform(data['Fare'].reshape(-1,1),Fare_scale)  

SibSp_scale=StandardScaler().fit(data['SibSp'])  

data['SibSp_scaled']=StandardScaler().fit_transform(data['SibSp'].reshape(-1,1),SibSp_scale)  

Parch_scale=StandardScaler().fit(data['Parch'])  

data['Parch_scaled']=StandardScaler().fit_transform(data['Parch'].reshape(-1,1),Parch_scale)  

#         

from sklearn.ensemble import RandomForestRegressor  

def set_missing_age(data):  

    train=data[['Age','SibSp_scaled','Parch_scaled','Name_0','Name_1','Name_2','Sex_0','Sex_1']]  

    known_age=train[train.Age.notnull()].as_matrix()  

    unknown_age=train[train.Age.isnull()].as_matrix()  

    y=known_age[:,0]  

    x=known_age[:,1:]  

    rf=RandomForestRegressor(random_state=0,n_estimators=200,n_jobs=-1)  

    rf.fit(x,y)  

    print rf.score(x,y)  

    predictage=rf.predict(unknown_age[:,1:])  

    data.loc[data.Age.isnull(),'Age']=predictage  

    return data,rf  

data,rf=set_missing_age(data)  

Age_scale=StandardScaler().fit(data['Age'])  

data['Age_scaled']=StandardScaler().fit_transform(data['Age'].reshape(-1,1),Age_scale)  

train_x=data[['Sex_0','Sex_1','Embarked_0','Embarked_1','Embarked_2','Name_0','Name_1','Name_2','Pclass_scaled','Age_scaled','Fare_scaled']].as_matrix()  

train_y=data['Survived'].as_matrix()  

모델 구축


우선, 이것은 분류 문제입니다. 우리는 논리 회귀를 선택할 수 있습니다(분류기입니다!!!),의사 결정 트리, boost 알고리즘(GDBT, AdaBoost, RandomForest, 가장 강력한 XGboost)(필자는 시간이 있으면 이 알고리즘들을 총괄하고 주목해 주십시오!)svm, 분류 알고리즘(무감독 학습), 논리 회귀,svm,randomForest와 GDBT 분류기를 선택하고 코드는 다음과 같습니다.
from sklearn.model_selection import train_test_split  

from sklearn.linear_model import LogisticRegression  

x_tr,x_te,y_tr,y_te=train_test_split(train_x,train_y,test_size=0.3,random_state=0)  

lr=LogisticRegression(C=1.0,tol=1e-6)  

lr.fit(x_tr,y_tr)  

print lr.score(x_te,y_te)  

from sklearn.svm import SVC  
#  svc    ,   Random_state=1
svc=SVC(C=2, kernel='rbf', decision_function_shape='ovo')  

svc.fit(x_tr,y_tr)  

print svc.score(x_te,y_te)  

from sklearn.ensemble import RandomForestClassifier  

randomf=RandomForestClassifier(n_estimators=500,max_depth=5,random_state=0)  

randomf.fit(x_tr,y_tr)  

print randomf.score(x_te,y_te)  

from sklearn.ensemble import GradientBoostingClassifier  

gdbt=GradientBoostingClassifier(n_estimators=600,max_depth=5,random_state=0)  

gdbt.fit(x_tr,y_tr)  

print gdbt.score(x_te,y_te)  
만약에 이 모델로 예측을 한다면 우리는 테스트집에 대해 같은 일을 해야 한다. 부족한 값을 보완하고 원-hot 인코딩, 귀일화 등(경기에 적용되고 예측 결과를 제출해야 한다)은 어떻게 성적을 향상시킬 것인가? -관련성이 크지 않은 분류기를 선택하여 그들이 예측한 결과로 투표하다
    from sklearn.ensemble import VotingClassifier  

    model=VotingClassifier(estimators=[('lr',lr),('svc',svc),('rf',randomf),('GDBT',gdbt)],voting='hard',weights=[0.5,1.5,0.6,0.6])  

    model.fit(x_tr,y_tr)  

    print model.score(x_te,y_te)  

좋은 웹페이지 즐겨찾기