【SIGNATE】책의 지식만으로 SIGNATE의 연습 문제에 도전해 보았다
SIGNATE 연습 문제에 도전해 보았습니다.
개발 환경
이번 도전한 연습 문제
【연습 문제】자동차 평가
속성 이름
설명
구매
자동차 판매 가격(vhigh, high, med, low)
maint
정비대(vhigh, high, med, low)
doors
문 수(2, 3, 4, 5, more.)
사람
정원 (2, 4, more.)
lug_boot
트렁크 크기(small, med, big.)
safety
안전성(low, med, high)
문제를 풀어 보았습니다.
우선 데이터 세트의 내용을 확인
# データセットを読み込むためにpandasをインポートする
import pandas as pd
# pandasのread_csvメソッドを用いてトレーニングデータ(train.tsv)を読み込む
# トレーニングデータはサイトからダウンロード済み
train_data = pd.read_csv('./train.tsv', delimiter='\t')
# トレーニングデータを表示
train_data
특징량의 문자열 데이터는 수치로 변환할 수 있고 책에 쓰여 있었으므로, 데이터의 문자열을 수치로 변환한다
※이번 사용한 데이터 세트에 포함되는 특징량은 모두 순서 특징량으로 분류되는 것이므로, 단순히 문자열을 순서대로 수치로 변환했다
# 各特徴量の変換用の辞書を設定する
buying_mapping = {'vhigh': 4, 'high': 3, 'med': 2, 'low': 1}
maint_mapping = {'vhigh': 4, 'high': 3, 'med': 2, 'low': 1}
doors_mapping = {'5more': 5, '4': 4, '3': 3, '2': 2}
persons_mapping = {'more': 6, '4': 4, '2': 2}
lug_boot_mapping = {'big': 3, 'med': 2, 'small': 1}
safety_mapping = {'high': 3, 'med': 2, 'low': 1}
# クラスラベル(class)の変換用の辞書を設定する
class_mapping = {'vgood': 4, 'good': 3, 'acc': 2, 'unacc': 1}
# トレーニングデータの各特徴量を変換する
train_data['buying'] = train_data['buying'].map(buying_mapping)
train_data['maint'] = train_data['maint'].map(maint_mapping)
train_data['doors'] = train_data['doors'].map(doors_mapping)
train_data['persons'] = train_data['persons'].map(persons_mapping)
train_data['lug_boot'] = train_data['lug_boot'].map(lug_boot_mapping)
train_data['safety'] = train_data['safety'].map(safety_mapping)
# トレーニングデータのクラスラベル(class)を変換する
train_data['class'] = train_data['class'].map(class_mapping)
# 変換後のトレーニングデータを表示
train_data
전환 완료
교육 데이터를 특징 량과 클래스 라벨로 나누기
# pandasのilocメソッドを用いてトレーニングデータを特徴量(train_data_X)とクラスラベル(train_data_Y)に分離する
# idは学習に用いないため別に保管する
train_data_X = train_data.iloc[:,2:]
train_data_Y = train_data.iloc[:,1:2]
train_data_id = train_data.iloc[:,0:1]
마지막으로 교육 데이터를 학습 데이터와 검증 데이터로 나눕니다.
from sklearn.model_selection import train_test_split
# トレーニングデータを学習用データ(learning_data)と検証用データ(learning_data)に分割する
learning_data_X, validation_data_X, learning_data_Y, validation_data_Y = train_test_split(
train_data_X, train_data_Y, test_size=0.3, random_state=1, stratify=train_data_Y)
이제 학습을 준비 할 수있었습니다.
우선 물류 회귀로 시도했습니다.
로지스틱 회귀가 가장 간단했기 때문에 우선 로지스틱 회귀로 시도했습니다.
특징량은 스케일링 미끄러짐과 책에 쓰여 있었으므로, 우선은 특징량의 표준화를 실시한다
from sklearn.preprocessing import StandardScaler
stdsc = StandardScaler()
stdsc.fit(learning_data_X)
# トレーニングデータの特徴量の標準化を行う
learning_data_X_std = stdsc.transform(learning_data_X)
validation_data_X_std = stdsc.transform(validation_data_X)
표준화 전의 데이터(learning_data_X)는 이런 느낌
표준화 후의 데이터(learning_data_X_std)는 이런 느낌
데이터를 보더라도 잘 모르겠지만 표준화 할 수있는 것 같습니다.
학습 데이터를 사용하여 로지스틱 회귀 클래스 학습
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C=100.0, random_state=1)
# 標準化した学習用データを用いてロジスティック回帰クラスを学習する
lr.fit(learning_data_X_std, learning_data_Y)
마지막으로 검증 데이터를 이용하여 예측
score = lr.score(validation_data_X_std, validation_data_Y)
score
이번에 만든 모델의 점수는 79.23%
덧붙여서, SIGNATE에서는 이 문제에 대한 모델의 랭킹을 공표하고 있어 현시점에서의 1위는 100%, 100위로 96.875%
(이번에 만든 모델, 절망적으로 정밀도 나쁘네..)
책을 조금 읽었을 뿐이라면 아직 안돼. 정진하지 않으면.
끝
이번 로지스틱 회귀의 모델은 하이퍼파라미터(C)의 최적화도 정규화항의 최적화도 실시하고 있지 않습니다
(C=1.0으로 계산하면 score가 77.69%로 떨어졌으므로 어쩌면 기적적으로 네 느낌의 파라미터를 선택했을지도 모릅니다만)
아직도 개량의 여지가 있으므로, 향후 이 모델을 개량해 나갈 것입니다
(일단 90%의 점수가 나올 때까지 노력하겠습니까?)
Reference
이 문제에 관하여(【SIGNATE】책의 지식만으로 SIGNATE의 연습 문제에 도전해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/sakaidamasaru/items/d3c8a2f85d862c0a4042
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
# データセットを読み込むためにpandasをインポートする
import pandas as pd
# pandasのread_csvメソッドを用いてトレーニングデータ(train.tsv)を読み込む
# トレーニングデータはサイトからダウンロード済み
train_data = pd.read_csv('./train.tsv', delimiter='\t')
# トレーニングデータを表示
train_data
# 各特徴量の変換用の辞書を設定する
buying_mapping = {'vhigh': 4, 'high': 3, 'med': 2, 'low': 1}
maint_mapping = {'vhigh': 4, 'high': 3, 'med': 2, 'low': 1}
doors_mapping = {'5more': 5, '4': 4, '3': 3, '2': 2}
persons_mapping = {'more': 6, '4': 4, '2': 2}
lug_boot_mapping = {'big': 3, 'med': 2, 'small': 1}
safety_mapping = {'high': 3, 'med': 2, 'low': 1}
# クラスラベル(class)の変換用の辞書を設定する
class_mapping = {'vgood': 4, 'good': 3, 'acc': 2, 'unacc': 1}
# トレーニングデータの各特徴量を変換する
train_data['buying'] = train_data['buying'].map(buying_mapping)
train_data['maint'] = train_data['maint'].map(maint_mapping)
train_data['doors'] = train_data['doors'].map(doors_mapping)
train_data['persons'] = train_data['persons'].map(persons_mapping)
train_data['lug_boot'] = train_data['lug_boot'].map(lug_boot_mapping)
train_data['safety'] = train_data['safety'].map(safety_mapping)
# トレーニングデータのクラスラベル(class)を変換する
train_data['class'] = train_data['class'].map(class_mapping)
# 変換後のトレーニングデータを表示
train_data
# pandasのilocメソッドを用いてトレーニングデータを特徴量(train_data_X)とクラスラベル(train_data_Y)に分離する
# idは学習に用いないため別に保管する
train_data_X = train_data.iloc[:,2:]
train_data_Y = train_data.iloc[:,1:2]
train_data_id = train_data.iloc[:,0:1]
from sklearn.model_selection import train_test_split
# トレーニングデータを学習用データ(learning_data)と検証用データ(learning_data)に分割する
learning_data_X, validation_data_X, learning_data_Y, validation_data_Y = train_test_split(
train_data_X, train_data_Y, test_size=0.3, random_state=1, stratify=train_data_Y)
from sklearn.preprocessing import StandardScaler
stdsc = StandardScaler()
stdsc.fit(learning_data_X)
# トレーニングデータの特徴量の標準化を行う
learning_data_X_std = stdsc.transform(learning_data_X)
validation_data_X_std = stdsc.transform(validation_data_X)
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C=100.0, random_state=1)
# 標準化した学習用データを用いてロジスティック回帰クラスを学習する
lr.fit(learning_data_X_std, learning_data_Y)
score = lr.score(validation_data_X_std, validation_data_Y)
score
Reference
이 문제에 관하여(【SIGNATE】책의 지식만으로 SIGNATE의 연습 문제에 도전해 보았다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/sakaidamasaru/items/d3c8a2f85d862c0a4042텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)