Skip to content

Instantly share code, notes, and snippets.

@zhusimaji
Last active February 27, 2018 09:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zhusimaji/9a0c2df2e26bdf0f60de8dbd98792d70 to your computer and use it in GitHub Desktop.
Save zhusimaji/9a0c2df2e26bdf0f60de8dbd98792d70 to your computer and use it in GitHub Desktop.
Display the source blob
Display the rendered blob
Raw
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"%matplotlib inline"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"# Feature transformations with ensembles of trees\n",
"\n",
"\n",
"Transform your features into a higher dimensional, sparse space. Then\n",
"train a linear model on these features.\n",
"\n",
"First fit an ensemble of trees (totally random trees, a random\n",
"forest, or gradient boosted trees) on the training set. Then each leaf\n",
"of each tree in the ensemble is assigned a fixed arbitrary feature\n",
"index in a new feature space. These leaf indices are then encoded in a\n",
"one-hot fashion.\n",
"\n",
"Each sample goes through the decisions of each tree of the ensemble\n",
"and ends up in one leaf per tree. The sample is encoded by setting\n",
"feature values for these leaves to 1 and the other feature values to 0.\n",
"\n",
"The resulting transformer has then learned a supervised, sparse,\n",
"high-dimensional categorical embedding of the data.\n",
"\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10fdca790>"
]
},
"metadata": {},
"output_type": "display_data"
},
{
"data": {
"image/png": "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\n2u/tHgAAAABJRU5ErkJggg==\n",
"text/plain": [
"<matplotlib.figure.Figure at 0x10f2ca3d0>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Author: Tim Head <betatim@gmail.com>\n",
"#\n",
"# License: BSD 3 clause\n",
"\n",
"import numpy as np\n",
"np.random.seed(10)\n",
"\n",
"import matplotlib.pyplot as plt\n",
"\n",
"from sklearn.datasets import make_classification\n",
"from sklearn.linear_model import LogisticRegression\n",
"from sklearn.ensemble import (RandomTreesEmbedding, RandomForestClassifier,\n",
" GradientBoostingClassifier)\n",
"from sklearn.preprocessing import OneHotEncoder\n",
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import roc_curve\n",
"from sklearn.pipeline import make_pipeline\n",
"\n",
"\n",
"n_estimator = 10\n",
"X, y = make_classification(n_samples=80000)\n",
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5)\n",
"# It is important to train the ensemble of trees on a different subset\n",
"# of the training data than the linear regression model to avoid\n",
"# overfitting, in particular if the total number of leaves is\n",
"# similar to the number of training samples\n",
"X_train, X_train_lr, y_train, y_train_lr = train_test_split(X_train,\n",
" y_train,\n",
" test_size=0.5)\n",
"\n",
"# Unsupervised transformation based on totally random trees\n",
"rt = RandomTreesEmbedding(max_depth=3, n_estimators=n_estimator,\n",
"\trandom_state=0)\n",
"\n",
"rt_lm = LogisticRegression()\n",
"pipeline = make_pipeline(rt, rt_lm)\n",
"pipeline.fit(X_train, y_train)\n",
"y_pred_rt = pipeline.predict_proba(X_test)[:, 1]\n",
"fpr_rt_lm, tpr_rt_lm, _ = roc_curve(y_test, y_pred_rt)\n",
"\n",
"# Supervised transformation based on random forests\n",
"rf = RandomForestClassifier(max_depth=3, n_estimators=n_estimator)\n",
"rf_enc = OneHotEncoder()\n",
"rf_lm = LogisticRegression()\n",
"rf.fit(X_train, y_train)\n",
"rf_enc.fit(rf.apply(X_train))\n",
"rf_lm.fit(rf_enc.transform(rf.apply(X_train_lr)), y_train_lr)\n",
"\n",
"y_pred_rf_lm = rf_lm.predict_proba(rf_enc.transform(rf.apply(X_test)))[:, 1]\n",
"fpr_rf_lm, tpr_rf_lm, _ = roc_curve(y_test, y_pred_rf_lm)\n",
"\n",
"grd = GradientBoostingClassifier(n_estimators=n_estimator)\n",
"grd_enc = OneHotEncoder()\n",
"grd_lm = LogisticRegression()\n",
"grd.fit(X_train, y_train)\n",
"grd_enc.fit(grd.apply(X_train)[:, :, 0])\n",
"grd_lm.fit(grd_enc.transform(grd.apply(X_train_lr)[:, :, 0]), y_train_lr)\n",
"\n",
"y_pred_grd_lm = grd_lm.predict_proba(\n",
" grd_enc.transform(grd.apply(X_test)[:, :, 0]))[:, 1]\n",
"fpr_grd_lm, tpr_grd_lm, _ = roc_curve(y_test, y_pred_grd_lm)\n",
"\n",
"\n",
"# The gradient boosted model by itself\n",
"y_pred_grd = grd.predict_proba(X_test)[:, 1]\n",
"fpr_grd, tpr_grd, _ = roc_curve(y_test, y_pred_grd)\n",
"\n",
"\n",
"# The random forest model by itself\n",
"y_pred_rf = rf.predict_proba(X_test)[:, 1]\n",
"fpr_rf, tpr_rf, _ = roc_curve(y_test, y_pred_rf)\n",
"\n",
"plt.figure(1)\n",
"plt.plot([0, 1], [0, 1], 'k--')\n",
"plt.plot(fpr_rt_lm, tpr_rt_lm, label='RT + LR')\n",
"plt.plot(fpr_rf, tpr_rf, label='RF')\n",
"plt.plot(fpr_rf_lm, tpr_rf_lm, label='RF + LR')\n",
"plt.plot(fpr_grd, tpr_grd, label='GBT')\n",
"plt.plot(fpr_grd_lm, tpr_grd_lm, label='GBT + LR')\n",
"plt.xlabel('False positive rate')\n",
"plt.ylabel('True positive rate')\n",
"plt.title('ROC curve')\n",
"plt.legend(loc='best')\n",
"plt.show()\n",
"\n",
"plt.figure(2)\n",
"plt.xlim(0, 0.2)\n",
"plt.ylim(0.8, 1)\n",
"plt.plot([0, 1], [0, 1], 'k--')\n",
"plt.plot(fpr_rt_lm, tpr_rt_lm, label='RT + LR')\n",
"plt.plot(fpr_rf, tpr_rf, label='RF')\n",
"plt.plot(fpr_rf_lm, tpr_rf_lm, label='RF + LR')\n",
"plt.plot(fpr_grd, tpr_grd, label='GBT')\n",
"plt.plot(fpr_grd_lm, tpr_grd_lm, label='GBT + LR')\n",
"plt.xlabel('False positive rate')\n",
"plt.ylabel('True positive rate')\n",
"plt.title('ROC curve (zoomed in at top left)')\n",
"plt.legend(loc='best')\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(20000, 80)\n",
" (0, 76)\t1.0\n",
" (0, 68)\t1.0\n",
" (0, 61)\t1.0\n",
" (0, 52)\t1.0\n",
" (0, 42)\t1.0\n",
" (0, 34)\t1.0\n",
" (0, 26)\t1.0\n",
" (0, 18)\t1.0\n",
" (0, 10)\t1.0\n",
" (0, 2)\t1.0\n"
]
}
],
"source": [
"#onehot编码对gbdt输出的数据编码\n",
"onehot=grd_enc.transform(grd.apply(X_train_lr)[:, :, 0])\n",
"print np.shape(onehot)\n",
"print onehot[0,:]"
]
},
{
"cell_type": "code",
"execution_count": 18,
"metadata": {
"collapsed": true
},
"outputs": [],
"source": [
"#将矩阵转化为libsvm格式\n",
"from sklearn.datasets import dump_svmlight_file\n",
"dump_svmlight_file(onehot,y_train_lr,'/Users/leiyang/test.txt')"
]
},
{
"cell_type": "code",
"execution_count": 17,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[[ 6.],\n",
" [ 6.],\n",
" [ 6.],\n",
" ..., \n",
" [ 11.],\n",
" [ 10.],\n",
" [ 10.]],\n",
"\n",
" [[ 6.],\n",
" [ 6.],\n",
" [ 6.],\n",
" ..., \n",
" [ 11.],\n",
" [ 10.],\n",
" [ 10.]],\n",
"\n",
" [[ 14.],\n",
" [ 14.],\n",
" [ 14.],\n",
" ..., \n",
" [ 3.],\n",
" [ 6.],\n",
" [ 3.]],\n",
"\n",
" ..., \n",
" [[ 10.],\n",
" [ 10.],\n",
" [ 10.],\n",
" ..., \n",
" [ 3.],\n",
" [ 3.],\n",
" [ 3.]],\n",
"\n",
" [[ 14.],\n",
" [ 14.],\n",
" [ 13.],\n",
" ..., \n",
" [ 7.],\n",
" [ 7.],\n",
" [ 7.]],\n",
"\n",
" [[ 6.],\n",
" [ 6.],\n",
" [ 6.],\n",
" ..., \n",
" [ 11.],\n",
" [ 10.],\n",
" [ 10.]]])"
]
},
"execution_count": 17,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"grd.apply(X_train_lr)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# 验证GBDT输出数据"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"apply_data=grd.apply(X_train_lr)[:, :, 0]"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 6., 6., 6., 6., 6., 6., 10., 11., 10., 10.])"
]
},
"execution_count": 10,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"apply_data[0,:]"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(20000, 10)"
]
},
"execution_count": 5,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.shape(grd.apply(X_train_lr)[:, :, 0])"
]
},
{
"cell_type": "code",
"execution_count": 16,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"8"
]
},
"execution_count": 16,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"len(np.unique(apply_data[:,9]))"
]
},
{
"cell_type": "code",
"execution_count": 15,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3., 4., 6., 7., 10., 11., 13., 14.])"
]
},
"execution_count": 15,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.unique(apply_data[:,9])"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 2",
"language": "python",
"name": "python2"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.13"
}
},
"nbformat": 4,
"nbformat_minor": 1
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment