future_encoder.py 적용
This commit is contained in:
@@ -2237,7 +2237,14 @@
|
|||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"데이터를 적재합니다:"
|
"먼저 [캐글](https://www.kaggle.com)에 로그인 하고 [타이타닉 챌린지](https://www.kaggle.com/c/titanic)에서 `train.csv`와 `test.csv`를 다운로드합니다. 두 파일을 `datasets/titanic` 디렉토리에 저장하세요."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"그다음 데이터를 적재합니다:"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -3082,11 +3089,11 @@
|
|||||||
"# stackoverflow.com/questions/25239958 에서 착안했습니다\n",
|
"# stackoverflow.com/questions/25239958 에서 착안했습니다\n",
|
||||||
"class MostFrequentImputer(BaseEstimator, TransformerMixin):\n",
|
"class MostFrequentImputer(BaseEstimator, TransformerMixin):\n",
|
||||||
" def fit(self, X, y=None):\n",
|
" def fit(self, X, y=None):\n",
|
||||||
" self.most_frequent = pd.Series([X[c].value_counts().index[0] for c in X],\n",
|
" self.most_frequent_ = pd.Series([X[c].value_counts().index[0] for c in X],\n",
|
||||||
" index=X.columns)\n",
|
" index=X.columns)\n",
|
||||||
" return self\n",
|
" return self\n",
|
||||||
" def transform(self, X, y=None):\n",
|
" def transform(self, X, y=None):\n",
|
||||||
" return X.fillna(self.most_frequent)"
|
" return X.fillna(self.most_frequent_)"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -3109,6 +3116,37 @@
|
|||||||
" ])"
|
" ])"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"### future_encoders.py를 사용한 방법 ==========================\n",
|
||||||
|
"\n",
|
||||||
|
"주의: 번역서는 `CategoricalEncoder`를 사용하여 각 범주형 값을 원-핫 벡터로 변경합니다. `OneHotEncoder`를 사용하는 것이 더 낫습니다. 지금은 정수형 범주 입력만 다룰 수 있지만 사이킷런 0.20에서는 문자열 범주 입력도 다룰 수 있을 것입니다(PR #10521). 지금은 `future_encoders.py` 파일에서 임포트하지만 사이킷런 0.20 버전이 릴리스되면 `sklearn.preprocessing`에서 바로 임포팅할 수 있습니다."
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "code",
|
||||||
|
"execution_count": null,
|
||||||
|
"metadata": {},
|
||||||
|
"outputs": [],
|
||||||
|
"source": [
|
||||||
|
"from future_encoders import OneHotEncoder\n",
|
||||||
|
"\n",
|
||||||
|
"cat_pipeline = Pipeline([\n",
|
||||||
|
" (\"select_cat\", DataFrameSelector([\"Pclass\", \"Sex\", \"Embarked\"])),\n",
|
||||||
|
" (\"imputer\", MostFrequentImputer()),\n",
|
||||||
|
" (\"cat_encoder\", OneHotEncoder(sparse=False)),\n",
|
||||||
|
" ])"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"cell_type": "markdown",
|
||||||
|
"metadata": {},
|
||||||
|
"source": [
|
||||||
|
"### ===================================================="
|
||||||
|
]
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 117,
|
"execution_count": 117,
|
||||||
@@ -3795,7 +3833,9 @@
|
|||||||
{
|
{
|
||||||
"cell_type": "code",
|
"cell_type": "code",
|
||||||
"execution_count": 138,
|
"execution_count": 138,
|
||||||
"metadata": {},
|
"metadata": {
|
||||||
|
"scrolled": true
|
||||||
|
},
|
||||||
"outputs": [
|
"outputs": [
|
||||||
{
|
{
|
||||||
"data": {
|
"data": {
|
||||||
@@ -4354,7 +4394,7 @@
|
|||||||
"cell_type": "markdown",
|
"cell_type": "markdown",
|
||||||
"metadata": {},
|
"metadata": {},
|
||||||
"source": [
|
"source": [
|
||||||
"이 행렬은 무엇을 의미하나요? 세 번째 행의 첫 번째 열의 92는 세 번째 이메일이 어휘 목록에 없는 단어를 92개 가지고 있다는 뜻입니다. 그 다음의 1은 어휘 목록에 있는 첫 번째 단어가 한 번 등장한다는 뜻이고 그 다음의 0은 한 번도 나타나지 않는다는 뜻입니다. 이 단어들이 무엇인지 확인하려면 어휘 목록을 보면 됩니다. 첫 번째 단어는 \"the\"이고 두 번째 단어는 \"of\"입니다."
|
"이 행렬은 무엇을 의미하나요? 세 번째 행의 첫 번째 열의 65는 세 번째 이메일이 어휘 목록에 없는 단어를 65개 가지고 있다는 뜻입니다. 그 다음의 0은 어휘 목록에 있는 첫 번째 단어가 한 번도 등장하지 않는다는 뜻이고 그 다음의 1은 한 번 나타난다는 뜻입니다. 이 단어들이 무엇인지 확인하려면 어휘 목록을 보면 됩니다. 첫 번째 단어는 \"the\"이고 두 번째 단어는 \"of\"입니다."
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -4450,7 +4490,7 @@
|
|||||||
"from sklearn.linear_model import LogisticRegression\n",
|
"from sklearn.linear_model import LogisticRegression\n",
|
||||||
"from sklearn.model_selection import cross_val_score\n",
|
"from sklearn.model_selection import cross_val_score\n",
|
||||||
"\n",
|
"\n",
|
||||||
"log_clf = LogisticRegression()\n",
|
"log_clf = LogisticRegression(random_state=42)\n",
|
||||||
"score = cross_val_score(log_clf, X_train_transformed, y_train, cv=3, verbose=3)\n",
|
"score = cross_val_score(log_clf, X_train_transformed, y_train, cv=3, verbose=3)\n",
|
||||||
"score.mean()"
|
"score.mean()"
|
||||||
]
|
]
|
||||||
@@ -4483,7 +4523,7 @@
|
|||||||
"\n",
|
"\n",
|
||||||
"X_test_transformed = preprocess_pipeline.transform(X_test)\n",
|
"X_test_transformed = preprocess_pipeline.transform(X_test)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"log_clf = LogisticRegression()\n",
|
"log_clf = LogisticRegression(random_state=42)\n",
|
||||||
"log_clf.fit(X_train_transformed, y_train)\n",
|
"log_clf.fit(X_train_transformed, y_train)\n",
|
||||||
"\n",
|
"\n",
|
||||||
"y_pred = log_clf.predict(X_test_transformed)\n",
|
"y_pred = log_clf.predict(X_test_transformed)\n",
|
||||||
|
|||||||
Reference in New Issue
Block a user