Files
2023-07-16 04:06:08 +00:00

2305 lines
312 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"cells": [
{
"cell_type": "code",
"execution_count": 22,
"id": "9466a2d2",
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"import matplotlib.pyplot as plt\n",
"import seaborn as sns\n",
"import itertools\n",
"from scipy import stats,integrate\n",
"plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签\n",
"plt.rcParams['axes.unicode_minus']=False #用来正常显示负号"
]
},
{
"cell_type": "code",
"execution_count": 23,
"id": "c54e020b",
"metadata": {
"scrolled": false
},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Name</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Braund, Mr. Owen Harris</td>\n",
" <td>male</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>2</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Cumings, Mrs. John Bradley (Florence Briggs Th...</td>\n",
" <td>female</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>3</td>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>Heikkinen, Miss. Laina</td>\n",
" <td>female</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>4</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>Futrelle, Mrs. Jacques Heath (Lily May Peel)</td>\n",
" <td>female</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>5</td>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>Allen, Mr. William Henry</td>\n",
" <td>male</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass \\\n",
"0 1 0 3 \n",
"1 2 1 1 \n",
"2 3 1 3 \n",
"3 4 1 1 \n",
"4 5 0 3 \n",
"\n",
" Name Sex Age SibSp \\\n",
"0 Braund, Mr. Owen Harris male 22.0 1 \n",
"1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 \n",
"2 Heikkinen, Miss. Laina female 26.0 0 \n",
"3 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 \n",
"4 Allen, Mr. William Henry male 35.0 0 \n",
"\n",
" Parch Ticket Fare Cabin Embarked \n",
"0 0 A/5 21171 7.2500 NaN S \n",
"1 0 PC 17599 71.2833 C85 C \n",
"2 0 STON/O2. 3101282 7.9250 NaN S \n",
"3 0 113803 53.1000 C123 S \n",
"4 0 373450 8.0500 NaN S "
]
},
"execution_count": 23,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 导入,读取数据\n",
"titanic_df = pd.read_csv('train.csv')\n",
"titanic_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 24,
"id": "714c289d",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<class 'pandas.core.frame.DataFrame'>\n",
"RangeIndex: 891 entries, 0 to 890\n",
"Data columns (total 12 columns):\n",
" # Column Non-Null Count Dtype \n",
"--- ------ -------------- ----- \n",
" 0 PassengerId 891 non-null int64 \n",
" 1 Survived 891 non-null int64 \n",
" 2 Pclass 891 non-null int64 \n",
" 3 Name 891 non-null object \n",
" 4 Sex 891 non-null object \n",
" 5 Age 714 non-null float64\n",
" 6 SibSp 891 non-null int64 \n",
" 7 Parch 891 non-null int64 \n",
" 8 Ticket 891 non-null object \n",
" 9 Fare 891 non-null float64\n",
" 10 Cabin 204 non-null object \n",
" 11 Embarked 889 non-null object \n",
"dtypes: float64(2), int64(5), object(5)\n",
"memory usage: 83.7+ KB\n"
]
}
],
"source": [
"titanic_df.info() # 观察数据完整性"
]
},
{
"cell_type": "code",
"execution_count": 25,
"id": "79d23ad0",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>PassengerId</th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Fare</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>714.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>446.000000</td>\n",
" <td>0.383838</td>\n",
" <td>2.308642</td>\n",
" <td>29.699118</td>\n",
" <td>0.523008</td>\n",
" <td>0.381594</td>\n",
" <td>32.204208</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>257.353842</td>\n",
" <td>0.486592</td>\n",
" <td>0.836071</td>\n",
" <td>14.526497</td>\n",
" <td>1.102743</td>\n",
" <td>0.806057</td>\n",
" <td>49.693429</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.420000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>223.500000</td>\n",
" <td>0.000000</td>\n",
" <td>2.000000</td>\n",
" <td>20.125000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>7.910400</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>446.000000</td>\n",
" <td>0.000000</td>\n",
" <td>3.000000</td>\n",
" <td>28.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>14.454200</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>668.500000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>38.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>31.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>891.000000</td>\n",
" <td>1.000000</td>\n",
" <td>3.000000</td>\n",
" <td>80.000000</td>\n",
" <td>8.000000</td>\n",
" <td>6.000000</td>\n",
" <td>512.329200</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" PassengerId Survived Pclass Age SibSp \\\n",
"count 891.000000 891.000000 891.000000 714.000000 891.000000 \n",
"mean 446.000000 0.383838 2.308642 29.699118 0.523008 \n",
"std 257.353842 0.486592 0.836071 14.526497 1.102743 \n",
"min 1.000000 0.000000 1.000000 0.420000 0.000000 \n",
"25% 223.500000 0.000000 2.000000 20.125000 0.000000 \n",
"50% 446.000000 0.000000 3.000000 28.000000 0.000000 \n",
"75% 668.500000 1.000000 3.000000 38.000000 1.000000 \n",
"max 891.000000 1.000000 3.000000 80.000000 8.000000 \n",
"\n",
" Parch Fare \n",
"count 891.000000 891.000000 \n",
"mean 0.381594 32.204208 \n",
"std 0.806057 49.693429 \n",
"min 0.000000 0.000000 \n",
"25% 0.000000 7.910400 \n",
"50% 0.000000 14.454200 \n",
"75% 0.000000 31.000000 \n",
"max 6.000000 512.329200 "
]
},
"execution_count": 25,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"titanic_df.describe()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"id": "0a616983",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>male</td>\n",
" <td>22.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>female</td>\n",
" <td>38.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>female</td>\n",
" <td>26.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>female</td>\n",
" <td>35.0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>male</td>\n",
" <td>35.0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Survived Pclass Sex Age SibSp Parch Ticket Fare \\\n",
"0 0 3 male 22.0 1 0 A/5 21171 7.2500 \n",
"1 1 1 female 38.0 1 0 PC 17599 71.2833 \n",
"2 1 3 female 26.0 0 0 STON/O2. 3101282 7.9250 \n",
"3 1 1 female 35.0 1 0 113803 53.1000 \n",
"4 0 3 male 35.0 0 0 373450 8.0500 \n",
"\n",
" Cabin Embarked \n",
"0 NaN S \n",
"1 C85 C \n",
"2 NaN S \n",
"3 C123 S \n",
"4 NaN S "
]
},
"execution_count": 26,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 从数据集中删除PassengerIdName变量\n",
"titanic_df.drop(['PassengerId','Name'], axis=1, inplace=True)\n",
"# 观察更新后的数据\n",
"titanic_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 27,
"id": "55e7c5d9",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Admin\\AppData\\Local\\Temp\\ipykernel_3712\\1366697872.py:1: FutureWarning: In a future version of pandas all arguments of Series.dropna will be keyword-only.\n",
" titanic_df[\"Embarked\"] = titanic_df[\"Embarked\"].dropna(0)\n"
]
},
{
"data": {
"image/png": "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dcRcAAAAQIvadQS2JX//+9919OjRjtodAAAA0KJ2v4nr2+e9Hj16VP/2b//WUXMBAAAALeqQj9FyOBxKSEhQcnJyR8wEAAAAnFW7TiEYNWqURo0apYsuukiffvqpLrroIuIVAAAAAdGuI7C1tbXKysrSvn371K9fPx05ckRDhgzRxo0b1a9fv46eEd3A4YeHWT3CBSHxwfesHgEAgE7XriOwc+bM0TXXXKNjx46pqqpKn3zyia6++mr967/+a0fPBwAAADTTriOwf/7zn/Xee+8pJCREkhQWFqZFixYpJSWlQ4cDAAAAvq1dR2CHDRumtWvXNrtt7dq1uvLKKztkKAAAAOBs2nUEduXKlRo7dqzWrVunpKQkHTx4UHV1ddq6dWtHzwcAAAA0066AvfLKK7V3715t3rxZNTU1mjlzpsaPH6+ePXt29HwAAABAM+06haCyslLXXXednE6ncnJytGTJEo0YMUJ79+7t6PkAAACAZtr9KQQ/+MEPdOONN0qSSkpKNGHCBM2dO7dDhwMAAAC+rV2nEOzevVsvvPCCoqKiJEk9e/bUvHnzdMUVV3TocAAAAMC3tftTCJ599tlmtz377LMaOnRohwwFAAAAnE27jsD++te/1k033aS1a9dqwIABOnTokNxut7Zs2dLR8wEAAADNtCtgU1NTtW/fPr388sv66KOPdOutt2r8+PGKiIjo6PkAAACAZtoVsJIUERGhW265pSNnAQAAAM6pXefAAgAAAFaxJGA3btyo5ORkBQUFacSIEaqqqpIkVVRUKD09XTExMcrJyZExxr9Na2sAAADoPgIesAcOHNCsWbOUn5+v2tpa9e/fX7Nnz5bP59PEiROVlpam0tJSVVZWqrCwUJJaXQMAAED3EvCAraqqUl5enn784x+rT58+uv3221VaWqri4mJ5PB4tX75cAwcOVF5entasWSNJra4BAACge2n3m7jaa8KECc2uf/DBBxo0aJDKy8s1cuRIhYeHS5JSUlJUWVkpSa2utcTn88nn8/mve73ejn4aAAAAsIilb+I6efKkli1bpjvuuENer1dJSUn+NYfDIafTKbfb3epaS5YuXaqoqCj/xeVydfpzAQAAQGBYGrD333+/evXqpdtuu01BQUEKDQ1tth4WFqb6+vpW11qycOFCeTwe/6WmpqbTngMAAAACK+CnEHzttdde09NP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Kiws1OjRo9u9/Zo1a9SrVy+dPHmy44YCOtnnn3+um2++WT179tTVV1+t0tJSvfnmmxowYECHPk5ubq5mzpzZofsEAu3Pf/6zhg0bprCwMF1//fU6fPiw1SPBhgjYC1x9fb2ysrJ01113qbKyUhEREbrrrrs6ZN8DBgzQm2++2SH7+trWrVt14sQJ/eUvf+mwfXbGnMA3zZo1SydOnNDu3bs1e/ZsTZo0SV9+yffWA9/2+eefa9KkSZo8ebIqKysVGxurn/zkJ1aPdYbO+A9QdCwC9gJXVVUlt9utWbNmyeVyafHixV3263Sbmpr0+uuva/To0XrttdesHgdok0OHDmnjxo363e9+p8GDB+uOO+5QcHCwmpqarB4N6HI2b96syMhIPfTQQ0pOTtYTTzyhHTt2cBQW542AvcC5XC45HA7l5ubq1KlTGj58uF566SX/+ltvvaXhw4crJiZG06ZN0+effy7pzFMBqqur/eE7btw4ORwOffjhh7r++uvlcDiUn5/f7HFXr16tPn366JJLLtEf//jHNs367rvvqqmpST//+c+bBeyAAQM0d+5c9e3bV/fee6+ysrIUFxensrIy5ebm6qabbtKoUaMUFRWlqVOnyuv1tmnOcz339jwHdD//93//p+TkZF166aX+2+68807t2rVLkrRp0yb1799fMTEx+q//+i//fd555x2NGDFCUVFRmjJlijwej39t9OjRKiws1PLly9W/f39t2rTJv/bZZ59p9OjRioyM1PTp03XixAn/Wntez+d6vDfeeENJSUmKj4/XL3/5S7lcrmbrwPl47733lJKS4v/9S0xMVEREhF555ZVWf0e3bNmiYcOGKTo6WrNnz5bP5/OvFRUVafDgwbr44ov1q1/9Sl9/uNLMmTP1wAMP6M4771SvXr10xRVXqKqqSpJkjNE999yjiy++WDExMZo/f76MMfr444/lcDh0/fXX68MPP5TD4ZDD4dDHH38sSWpsbNSDDz6oSy+9VAMGDNDKlSslSc8//7wyMzMlScOHD1dOTo5OnDihHj166Pjx4xo9erR+/etf60c/+pF69uypkSNH+veJdjK44L344osmKirK9O/f36xdu9Z/++HDh03Pnj1NQUGBOXDggJk4caLJysoyxhjzzDPPmFGjRvnve+jQIfP1r8sXX3xh3G63cblcZvPmzcbtdpuvvvrKv93FF19sxo4da/bu3WtycnKMy+Vq05yPPvqoGTdunDlw4IDp0aOH+eyzz4wxxvTv399MnTrVPPXUU0aSeemll0xmZqZ55JFHzOLFi40ks3btWrN3714zYsQI84tf/OKcc57rubf3OaD7yc/PNxkZGWfcvm3bNtOrVy/z/e9/37z33nvmySefNCEhIaa+vt643W7Tu3dv89BDD5kPP/zQjB071vz85z/3bztq1CgzcuRIM378ePPqq6+aY8eOGWOM//f9d7/7nfnggw9MWlqaycnJMca0//Xc2uM1NTWZfv36mWeffdZs27bN9OzZ0+zdu9d4vd6O/jGim5g9e7b5yU9+0uy2hIQE8+ijj571d3T//v0mJCTErFmzxuzfv98MHz7cLFmyxBhjzFtvvWVCQkLMyy+/bN577z2TkJBgnn32WWOMMT/96U9NXFyc+eUvf2kOHTpkRo0aZW699VZjjDHFxcUmJibG7N6921RUVBiXy2W2bNlimpqajNvtNps3bzYul8u43W7jdrtNU1OTMcaYZcuWmcGDB5uysjKzbds2ExcXZzZs2GA++OAD06dPH9PU1GR+8IMfmKysLLNr1y6TmJhojDn9GuvTp4954oknzL59+8z3vvc988ADD3Tqz/pCR8B2E59//rlZvHixCQsLM3fffbcxxpi8vDxzww03+O9TW1trJJmjR4+e8y88Y06H5bZt25rd9swzz5iwsDDz8ccfG2OM+eCDD87Y7mxGjx5tcnNzjTHG9OnTx7z44ov+xykuLjbbtm0zffr0Mcac/hfT4sWLzeLFi80//uM/+vfx0ksvmf79+59zznM99/Y+B3Q/S5YsMdddd90Zt2/bts1IMrt37zbGGOPz+YwkU11dbZ599lnTt29f/1+KW7ZsMXFxcf5tR40aZa688kpz8uTJZvtcvHixGTFihP/6iy++aJKSkowx3+31fLbH++STT4wk4/P5jDHG9O3b1+zcufO8fj7AN307YBsbG88ZsEuWLGn2e//000+b9PR0Y4wxP//5z82//Mu/+Nfuu+8+86Mf/cgYc/rvidTUVP/aqlWrzOjRo40xxrz55psmKirKvP3226ahocE0Njb6X4/GnH79fvvvEmOMGTJkiFm3bp3/+qOPPmrGjh1rmpqaTK9evUx5ebm57bbbzA033GBeeOEFk52dbYw5/Rr7+s/GGLNw4UIzc+bMtv/gcAbbfJUs2ufIkSP68ssvNXDgQOXm5mr06NG6/vrrNX/+fNXU1Cg5Odl/3379+ik0NFQ1NTVn7Ke+vr7Nj/m9731Pffr0kSSFhIS0aZsTJ05o586devvtt/XEE0/oiy++0Guvvaabb75ZkhQWFtbsn9/kcrn8f46Pj9cnn3xyzsc713Nvz3NA9xQdHS23293stoyMDN16662KiYnRVVddJen//x4ZY1RbW6tjx44pJiZG0unzv+vq6vTVV1/5f8fnzp2r4ODgMx4vKSnJ/+fExEQdPXpU0rl/p7+ppddzS4/Xu3dvRUdH6y9/+YsSEhLk8Xg0aNCgc/9QgLPo3bu3KioqJEnr16/XsWPH5Ha7FR0d3ex+3/wdra2t1bvvvuu/T0NDg3r16uVf27Ztm3/t5MmTSklJ8W/7zdMSQkJC/KcXjBo1Sr/61a80a9YsHTlyRDfffLNWrFihnj17tjr/t19nycnJWrdunRwOh6666ipt3rxZQ4YMUU1Njd5//31dffXV/vtef/31Lc6C9uEc2AvcH/7wB82ePdt/PTMzU8HBwfJ4PEpMTNTBgwf9a7W1tfL5fEpMTJTD4VBjY6N/rbS09Ix99+jRo8UXYGRk5HnPuX37dvXo0UN79uzR7t27tWTJkja/kau6utr/58OHDzc7F/Fsc7b23Nv7HNA9paamau/evf5zr6XTb+xKTEw86+9RQkKCrrnmGu3evVu7d+9WeXm5du3a1Swgz/YX6TeDtLa21v8fWt/19dzS4zU1NSktLU3//M//rCuuuEKPPvooX+GN7yQlJUXl5eX+fyc/+OCDOnHihI4dO3bW39GEhARNmjSp2evl678fEhISNHfu3GZra9eu9W97ttfg/v37NXHiRL3//vuqqKhQSUmJnn76af/62f5++/br7MCBA/6/N1JTU7VhwwYNHjxYSUlJevnll5WamnrOWdA+BOwFbsyYMdq5c6fWr1+v2tpa5ebm6tJLL9Xll1+un/zkJ9q5c6dWr16tQ4cO6fbbb1d2drb69OmjhIQEvf/++3K73frkk0+0bNmyM/Y9aNAgbdmyRUePHtXrr7/+nebcunWrrr32Wg0aNEgDBgzQlClTdOjQIR04cOCc25aUlGjt2rXat2+fHnvsMU2ZMuWcc7b23IHzkZGRoaFDh+q2227TwYMH9cgjj+jUqVOtbjN+/Hh9+OGH+utf/yqn06nnn39e48aNa9MRmZ07d+q5557T/v379fjjjys7O1tS67/TbXk9t2THjh367LPPVFpaqsOHD+vuu+9u03bA2UyYMEFfffWVFi1apO9///tyOp0aMWKErr322rP+jt5yyy3asWOH9u3bJ0l68sknNWvWLEnSjBkztHHjRn388cdqaGjQokWLtGjRonPO8cYbb+iHP/yhdu3apZMnT8rhcDT75JDk5GQdOXJEZWVl2r9/v/9Nmbfddptyc3O1a9cubd++XU8++aTmzp0r6XTAlpWVaciQIRo8eLDKysqaHYFFxyJgL3DDhg3TM888o8WLF+uyyy7Ttm3btHHjRoWEhCghIUGvvPKKfv3rXys1NVU9e/bUM888I+n0/+oYN26chg0bpokTJ+qRRx45Y9/Lli3Tli1blJSUpIceeug7zfnaa6/pBz/4gf/6ZZddJpfLpa1bt55z24kTJ6qoqEjXXHONBg4cqMWLF59zztaeO3A+HA6HNm/eLK/Xq6FDh2rDhg0qLi5u9X9FRkdHa9OmTfrP//xPXX755dqwYYM2bdqkoKBzn9U1duxYrV69WmlpaUpMTNTDDz8sqfXf6ba8nlvyD//wDzp27JiuvfZaXXrppYqMjPQ/HtAekZGR2rRpk15++WVddtll6t27tz777LNWf0eTk5O1du1aLViwQEOHDlVFRYXWr18vSbruuuuUm5urW2+9VampqTp58qR+85vfnHOOWbNmKTMzU2PHjlVKSooGDx6s22+/3b+ekJCgxx57TGPHjtXVV1+tnTt3SpLmz5+vqVOn6qabbtKMGTOUm5urrKwsSacD1ul0Kjk5WYMHD1afPn3Ur1+/jvzx4RschpMwYGO5ubmqrq5WYWGh1aMAF5wHHnhAH330kR599FGFhITotdde01133aXjx49bPRouEKdOndKOHTuaHcAA2oI3cQEAWpSdna0777xTQ4YMUUNDg4YMGdLsPEHguwoODiZe0S4cgQUAAICtcA4sAAAAbIWABQAAgK0QsAAAALAVAhYAAAC2QsACQAd688035XA4ml2+/trLs8nNzdXMmTM7fI4BAwZ85/0UFhY2+zpOAOgK+BgtAOhgkZGR+vDDD/3XHQ6HhdMAwIWHgAWADuZwOBQdHW31GABwweIUAgAIgAEDBmju3Lnq27ev7r33XmVlZSkuLk5lZWWSpM8++0yjR49WZGSkpk+frhMnTvi3femllzRkyBD17NlT119/vWpra/1ro0ePVmFhoZYvX67+/ftr06ZNZzz2iRMndM011yg3N9d/25YtWzRs2DBFR0dr9uzZ8vl8/rUlS5YoLi5OgwYN0rvvvtsJPw0A+G4IWADoYB6PR9HR0f7LnDlz/Lc/8MADeuyxxzRz5kxdccUV2rJliyRp8+bN+ulPf6rS0lJ98MEHeuihhySdDttbbrlF999/v/bv36/Y2Nhm3xMvSatWrdIbb7yh1atXKyMjo9laY2Ojpk6dqtTUVH/AHjhwQFlZWbr77rtVVlamsrIyPf7445KkTZs26YknntCf/vQnFRUVad26dZ35owKAduEUAgDoYBEREdq9e7f/eq9evfTqq6/qpz/9qcLCwtSnTx9NnjxZGzdu1KlTpyRJI0aM0KxZsyRJ9913n375y1/qscceU0REhA4fPqyIiAiVlpbq5MmT2rt3b7PH++KLL/TWW28pODj4jFnmz5+vbdu26e9//7v/tvXr1ys1NVU/+9nPJElz587VmjVrdP/992vDhg2aPn26MjMzJUmzZ8/W22+/3aE/HwD4rghYAOhgPXr0aPETAMLCwpr985uSkpL8f05MTNTRo0clScYY3XfffdqwYYOuuOIKRUVFqbGxsdm2c+fObTFeDx8+rL/+9a8aMWKEVq9erfnz50uSamtr9e677/rP021oaPB/UsLRo0ebfTd9cnIyAQugyyFgAaALqKmp8f+5trZWffr0kST9/ve/1/bt2/XRRx+pV69e+s1vfqMXXnih2bY9e/ZscZ9RUVH6n//5Hx06dEjjx4/XrFmzFBkZqYSEBE2aNEnLli2TdPo0g/r6eknSJZdcoiNHjvj3cfjw4Q59ngDQETgHFgA6mDFGn3/+ebPLt4+aftvOnTv13HPPaf/+/Xr88ceVnZ0t6fTpAdLpc2GLi4u1ZMkSGWPaNEdUVJQuvvhipaen6/vf/74ee+wxSdItt9yiHTt2aN++fZKkJ5980n/6QlZWltatW6edO3fq7bff1urVq9vzIwCATsURWADoYF6vVzExMc1uczqdrW4zduxYrV69WnfeeaduuukmPfzww5KkGTNmaPPmzfre976nYcOGac6cOVq5cqW++uqrFk9FOJuHH35Y1157re68804lJydr7dq1WrBggQ4ePKgRI0Zo/fr1kqQpU6Zoz549ysrKUu/evZWVleUPXQDoKhymrf8pDwAAAHQBnEIAAAAAWyFgAQAAYCsELAAAAGyFgAUAAICtELAAAACwFQIWAAAAtkLAAgAAwFYIWAAAANgKAQsAAABbIWABAABgKwQsAAAAbOX/AVnx9fvmMEwuAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"titanic_df[\"Embarked\"] = titanic_df[\"Embarked\"].dropna(0)\n",
"\n",
"f, ax = plt.subplots(figsize = (8, 6))\n",
"sns.countplot(x=\"Embarked\", data=titanic_df,hue=\"Survived\") # hue=\"Survived\"\n",
"ax.set_xticklabels([\"South Ampton\",\"Cherbourg\",\"Queenstown\"])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 28,
"id": "6ab485c5",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Embarked</th>\n",
" <th>Survived</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>C</td>\n",
" <td>0.553571</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>Q</td>\n",
" <td>0.389610</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>S</td>\n",
" <td>0.336957</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Embarked Survived\n",
"0 C 0.553571\n",
"1 Q 0.389610\n",
"2 S 0.336957"
]
},
"execution_count": 28,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"titanic_df[['Embarked', 'Survived']].groupby(['Embarked'], as_index=False).mean().sort_values(by='Embarked', ascending=True)"
]
},
{
"cell_type": "code",
"execution_count": 29,
"id": "52c59729",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.ensemble import RandomForestRegressor"
]
},
{
"cell_type": "code",
"execution_count": 30,
"id": "f448fbf3",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Admin\\anaconda3\\lib\\site-packages\\sklearn\\base.py:420: UserWarning: X does not have valid feature names, but RandomForestRegressor was fitted with feature names\n",
" warnings.warn(\n",
"C:\\Users\\Admin\\AppData\\Local\\Temp\\ipykernel_3712\\1365361757.py:17: UserWarning: \n",
"\n",
"`distplot` is a deprecated function and will be removed in seaborn v0.14.0.\n",
"\n",
"Please adapt your code to use either `displot` (a figure-level function with\n",
"similar flexibility) or `histplot` (an axes-level function for histograms).\n",
"\n",
"For a guide to updating your code to use the new functions, please see\n",
"https://gist.github.com/mwaskom/de44147ed2974457ad6372750bbe5751\n",
"\n",
" sns.distplot(titanic_df[\"Age\"].dropna(), kde=True, bins=50, fit=stats.gamma)\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAjsAAAGvCAYAAAC9yRSTAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABopUlEQVR4nO3dd3hUZd7G8e+U9B6SQAgt9F4FESmCFEEpKqBg7wjqy9p2LeC67gq6iNgVpYiAFBULioKCIAi4oYeEXhJCSyCZ9DZz3j8iUaQlIZlJJvfnuubSmTnPyW+OMbnznKeYDMMwEBEREXFTZlcXICIiIlKRFHZERETErSnsiIiIiFtT2BERERG3prAjIiIibk1hR0RERNyawo6IiIi4NYUdERERcWsKOyIiIuLWFHZERETErVld8UVjY2O555572LdvH/fffz+vvvoqJpPpom1Wr17NmDFjSE5O5tlnn+Xxxx8vfm/w4MEsXbq0+Pm1117Ljz/+WKJaHA4HR48eJSAg4JI1iIiISOVgGAYZGRnUrl0bs/kSfTeGk+Xm5hoNGjQwHnroIWPfvn3GoEGDjJkzZ160zcmTJ43AwEDjxRdfNPbs2WN07NjRWLlyZfH7kZGRxo4dO4zU1FQjNTXVyMzMLHE9iYmJBqCHHnrooYceelTBR2Ji4iV/15sMw7kbgX755Zfce++9HDlyBF9fX7Zt28a4ceNYu3btBdtMmzaN999/n/j4eEwmE1999RWLFy9m7ty5HDlyhM6dO3Ps2LEy1WOz2QgODiYxMZHAwMCyfiwRERFxovT0dOrWrUtaWhpBQUEXPdbpt7G2bdtG165d8fX1BaBt27bExcVdsk2fPn2KbzN16dKFZ555BoDffvsNu91OnTp1SE1NZfDgwbz33nuEhISc91x5eXnk5eUVP8/IyAAgMDBQYUdERKSKKckQFKcPUE5PTyc6Orr4uclkwmKxkJqaWuI2gYGBJCUlAbBnzx46derEDz/8QExMDIcOHeLZZ5+94LkmTZpEUFBQ8aNu3brl8KlERESksnJ62LFarXh5eZ31mre3N9nZ2SVu8+fj//GPf7Bs2TJatWpFixYteOWVV/jss88ueK5nnnkGm81W/EhMTLzMTyQiIiKVmdNvY4WGhhIbG3vWaxkZGXh6el60TXJycomODw4OJiUlhby8vHNCFYCXl9d5XxcRERH35PSenc6dO7Nhw4bi54cOHSIvL4/Q0NASt9m6dStRUVEADB8+/Kz3/ve//1GrVi0FGhEREQFcEHZ69uyJzWZjzpw5AEyePJm+fftisVhIT0+noKDgnDZDhgxh7dq1rFq1isLCQqZMmcKAAQOAogHOf/vb39i4cSNLly5lwoQJjB071qmfSURERCovp089h6Lp56NHjyYgIAC73c7q1atp1aoVDRo0YNq0aQwbNuycNu+++y7jx48nKCgIPz8/Nm7cSM2aNSkoKGDMmDEsXryYiIgI7rzzTp599lms1pLdoUtPTycoKAibzabZWCIiIlVEaX5/uyTsACQlJRETE0O3bt0IDw8vUZt9+/YRHx9Pr169yi2YKOyIiIhUPVUi7FQWCjsiIiJVT2l+f2sjUBEREXFrCjsiIiLi1hR2RERExK0p7IiIiIhbU9gRERERt6awIyIiIm5NYUdERETcmtM3AhWRymP+xoQLvjf6ynpOrEREpOKoZ0dERETcmsKOiIiIuDWFHREREXFrCjsiIiLi1hR2RERExK0p7IiIiIhbU9gRERERt6awIyIiIm5NYUdERETcmsKOiIiIuDWFHREREXFrCjsiIiLi1hR2RERExK0p7IiIiIhbU9gRERERt6awIyIiIm5NYUdERETcmsKOiIiIuDWFHREREXFrCjsiIiLi1hR2RERExK0p7IiIiIhbU9gRERERt6awIyIiIm5NYUdERETcmsKOiIiIuDWFHREREXFrCjsiIiLi1hR2RERExK0p7IiIiIhbs7q6ABEpmfkbEy743ugr6zmxEhGRqkU9OyIiIuLWFHZERETErSnsiIiIiFtT2BERERG3prAjIiIibk1hR0RERNyawo6IiIi4NYUdERERcWsKOyIiIuLWFHZERETErSnsiIiIiFtT2BERERG3prAjIiIibk1hR0RERNyawo6IiIi4NYUdERERcWsKOyIiIuLWFHZERETErSnsiIiIiFtT2BERERG3prAjIiIibk1hR0RERNyaS8JObGwsnTt3JiQkhKeeegrDMC7ZZvXq1bRo0YKwsDCmTp163mMKCgpo06YNP//8czlXLCIiIlWV08NOXl4egwcPplOnTsTExBAXF8fs2bMv2iY5OZkhQ4YwatQo1q9fz7x581i1atU5x7366qvExsZWUOUiIiJSFTk97CxbtgybzcbUqVNp1KgRL7/8MjNmzLhom3nz5hEZGcmECRNo0qQJEydOPKfN3r17mTJlCg0aNKjA6kVERKSqcXrY2bZtG127dsXX1xeAtm3bEhcXd8k2ffr0wWQyAdClSxc2b9581jEPPfQQ//jHP6hfv/5Fz5WXl0d6evpZDxEREXFfTg876enpREdHFz83mUxYLBZSU1NL3CYwMJCkpKTi57NmzcJms/HEE09c8utPmjSJoKCg4kfdunXL+ElERESkKnB62LFarXh5eZ31mre3N9nZ2SVu8+fjk5OTeeaZZ5gxYwZWq/WSX/+ZZ57BZrMVPxITE8v4SURERKQquHQ6KGehoaHnDCLOyMjA09Pzom2Sk5PPe/z48eO57777aN++fYm+vpeX1zlhS0RERNyX03t2OnfuzIYNG4qfHzp0iLy8PEJDQ0vcZuvWrURFRQEwf/583nrrLYKDgwkODmbt2rXccMMNTJ48ueI+hIiIiFQZTu/Z6dmzJzabjTlz5nDnnXcyefJk+vbti8ViIT09HR8fHzw8PM5qM2TIEMaNG8eqVavo0aMHU6ZMYcCAAQAcPHjwrGNvvfVWxo8fz3XXXee0zyRS3czfmHDB90ZfWc+JlYiIXJrTw47VamX69OmMHj2ap556CrvdzurVq4GimVnTpk1j2LBhZ7UJCwvjtddeY8CAAQQFBeHn51c89fyvU829vb2pVasWwcHBTvg0IiIiUtk5PewADBs2jL179xITE0O3bt0IDw8Him5pXcjYsWPp378/8fHx9OrVi8DAwPMep9WTRURE5M9cEnYAoqKiisfdlFTjxo1p3LhxBVUkIiIi7kgbgYqIiIhbU9gRERERt6awIyIiIm5NYUdERETcmsKOiIiIuDWFHREREXFrLpt6LuKutLqwiEjlop4dERERcWsKOyIiIuLWFHZERETErSnsiIiIiFtT2BERERG3prAjIiIibk1hR0RERNyawo6IiIi4NYUdERERcWsKOyIiIuLWFHZERETErSnsiIiIiFtT2BERERG3prAjIiIibk1hR0RERNyawo6IiIi4NYUdERERcWsKOyIiIuLWFHZERETErSnsiIiIiFtT2BERERG3prAjIiIibk1hR0RERNyawo6IiIi4NYUdERERcWtWVxcgUp3M35hw0fdHX1nPSZVUThe7PtX92ohI2alnR0RERNyawo6IiIi4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HA6H8c9//tOoV6+e4eHhYXTo0MGIiYkxDEPX+XJoI1A5S1l2o5ey0/WueLrGzqHr7By6zmWjsCMiIiJuTWN2RERExK0p7IiIiIhbU9gRERERt6awIyIiIm5NYUdERETcmsKOiFRpP/30EyaTiaNHj7q6FBGppBR2RKRKW758OVC0/5iIyPlonR0RqdI6duxIUFAQUVFRzJ0719XliEglpJ4dEamykpOT2bZtG0888QQ//vgjZ/522759O61btyYsLIzHH3+c5s2b89ZbbwHw/fff06ZNG4KDg7n//vvJy8tz5UcQESdQ2BGRKmvFihU0bdqUvn37kpqayo4dOwAYM2YMt912GytXrmTGjBnMmjWL22+/nf379zN06FD+9re/sWnTJjZt2sR///tfF38KEaloCjsiUmWtWLGCrl274u3tTYcOHYrH72zdupWbb76Ztm3b0rJlSw4dOkRISAiffvopHTp04N5776VRo0aMGTOGr7/+2sWfQkQqmtXVBYiIlNWKFStISUlhyZIlZGdnExQUxJNPPknjxo1Zv349YWFh7N27l5YtWwJFmyhu3ryZ4OBgAAoLC/H393fhJxARZ1DYEZEqKS4ujqSkJDZs2EDNmjX55ZdfeOihh8jLy6NVq1Y89thjPPDAAzzyyCO0a9cOgDp16jBkyBCmTJkCgN1uJzs725UfQ0ScQGFHRKqk5cuX07hxY6688koAwsLCuO+++5g7dy5r1qxh3bp1BAUFUbdu3eI2o0aN4s0332Tv3r00adKEN954g19//ZWYmBhXfQwRcQKN2RGRKmnFihX06dOn+Lm/vz9du3Zl165d1KxZk169ehEdHY2Pjw9jxowBoGHDhnz88cc8/vjjtGrVitjYWD799FNXfQQRcRKtsyMibmXGjBksWrSIjz76CF9fX7Zt28agQYM4efIkgYGBri5PRFxAt7FExK306dOH+fPn07p1a3JycoiOjua1115T0BGpxtSzIyIiIm5NY3ZERETErSnsiIiIiFtT2BERERG3prAjIiIibk1hR0RERNyawo6IiIi4NYUdERERcWsKOyIiIuLWFHZERETErf0/cU9iuiZomusAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"age_df = titanic_df[[\"Age\", \"Fare\", \"Parch\", \"SibSp\", \"Pclass\"]].copy() # .copy()用于复制原始数据 挑选数值型字段\n",
"\n",
"# 分割有缺失值的数据集\n",
"age_df_notnull = age_df.loc[age_df.Age.notnull()]\n",
"age_df_isnull = age_df.loc[age_df.Age.isnull()]\n",
"\n",
"# 利用非缺失数据建模\n",
"x = age_df_notnull.iloc[:, 1:]\n",
"y = age_df_notnull.values[:, 0]\n",
"x_test = age_df_isnull.values[:, 1:]\n",
"\n",
"rfr = RandomForestRegressor(n_estimators=1000, n_jobs=-1)\n",
"rfr.fit(x, y)\n",
"y_pred = rfr.predict(x_test)\n",
"\n",
"titanic_df.loc[titanic_df[\"Age\"].isnull(), \"Age\"] = y_pred\n",
"sns.distplot(titanic_df[\"Age\"].dropna(), kde=True, bins=50, fit=stats.gamma)\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 31,
"id": "cee4a7a0",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>AgeLevel</th>\n",
" <th>Survived</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>(0.34, 20.315]</td>\n",
" <td>0.428571</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>(20.315, 40.21]</td>\n",
" <td>0.369732</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>(40.21, 60.105]</td>\n",
" <td>0.398601</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>(60.105, 80.0]</td>\n",
" <td>0.217391</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" AgeLevel Survived\n",
"0 (0.34, 20.315] 0.428571\n",
"1 (20.315, 40.21] 0.369732\n",
"2 (40.21, 60.105] 0.398601\n",
"3 (60.105, 80.0] 0.217391"
]
},
"execution_count": 31,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"titanic_df['AgeLevel'] = pd.cut(titanic_df['Age'], 4)\n",
"titanic_df[['AgeLevel', 'Survived']].groupby(['AgeLevel'], as_index=False).mean().sort_values(by='AgeLevel', ascending=True)"
]
},
{
"cell_type": "code",
"execution_count": 32,
"id": "b989ca08",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>SibSp</th>\n",
" <th>Parch</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Survived Pclass Sex Age SibSp Parch Ticket Fare \\\n",
"0 0 3 male 1 1 0 A/5 21171 7.2500 \n",
"1 1 1 female 1 1 0 PC 17599 71.2833 \n",
"2 1 3 female 1 0 0 STON/O2. 3101282 7.9250 \n",
"3 1 1 female 1 1 0 113803 53.1000 \n",
"4 0 3 male 1 0 0 373450 8.0500 \n",
"\n",
" Cabin Embarked \n",
"0 NaN S \n",
"1 C85 C \n",
"2 NaN S \n",
"3 C123 S \n",
"4 NaN S "
]
},
"execution_count": 32,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"titanic_df.loc[titanic_df['Age'] <= 20.315, 'Age'] = 0\n",
"titanic_df.loc[(titanic_df['Age'] > 20.315) & (titanic_df['Age'] <= 40.21), 'Age'] = 1\n",
"titanic_df.loc[(titanic_df['Age'] > 40.21) & (titanic_df['Age'] <= 60.105), 'Age'] = 2\n",
"titanic_df.loc[titanic_df['Age'] > 60.105, 'Age'] = 3\n",
"titanic_df['Age'] = titanic_df['Age'].astype(int)\n",
"titanic_df.drop(['AgeLevel'], axis=1, inplace=True)\n",
"titanic_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 33,
"id": "7a020bd2",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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zWaT0+nU5ZdfrnvuuUfJycnatm2b1WMBgFEIWACwkMPh0OnTp7Vz505dd911uvTSS/W9731PH3/8cbfW3759uyZOnKjo6GhlZ2errq4uuGzLli36zne+o+joaH3ve9/Tvn37gsvWrl2r5ORkXXLJJbrlllt07NixPv9uANBfCFgAsMhbb72l3bt3a8KECZo+fbpuvfVW7d69W1OmTFFBQcEF129vb9ecOXP0z//8z9q/f79ycnJUVFQUXD5//nz95Cc/0Z49ezR+/Hg9/PDDkqTjx49r4cKFKisrk9vtlsPh0LJly/rtewJAX+McWAAIIa/XK6fTqZMnTyoqKkp/+MMf9PHHHyshIUHFxcWSpIcffljf/e53u7W9Xbt2KS4uTrW1tWpubtaePXuCy4YNGya/36+4uDg988wzam9vlyTZ7XaFh4fL7/drxIgReu2118RNGQGYhCOwABBCMTEx+vDDD7Vv3z55PB4tWLBAn332mZKTk4PviY+P149+9KMLbissLEzLly9XUlKSHnjgAXm9XrW1tQWXr1u3Tu+++64uv/xyXX/99frggw8knQnbl19+WeXl5UpMTNT06dO1f//+Pv+uANBfCFgACKGwsDAlJycrKSkpeFksl8ulAwcOBN9z/PhxjR8/Xn//+9+73Na7776rlStXqr6+XtXV1frJT34SXPb111/r66+/1ltvvaUvv/xSN9xwg+666y5J0rFjxxQfH6+//vWv+vzzzzVixAg99NBD/fBtAaB/ELAAYLEZM2bI4/GopKREn332mZ544gm1tbVp5MiRXa53/PhxSWdOS/jrX/+qJUuWBE8FaG9v14wZM7R27VodPXpUYWFhwVMIjh49qh/84AfavHmzfD5fh2UAYAICFgAsFhsbq82bN+v111/Xd77zHVVVVenVV1+94I0Lzv7w65prrtHixYt1zz336NChQ/r8888VExOjtWvX6sknn1RaWppef/11rVy5UpL07W9/W//+7/+u++67T6mpqdq9e7d+85vfhOKrAkCfsAU4cx8AAAAG4QgsAAAAjELAAgAAwCgELAAAAIxCwAIAAMAoBCwAAACMQsACAADAKAQsAAAAjELAAgAAwCgELAAAAIxCwAIAAMAoBCwAAACM8v8BZx8AqT11psUAAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"titanic_df[['Pclass', 'Survived']].groupby(['Pclass'], as_index=False).mean()\n",
"\n",
"f, ax = plt.subplots(figsize = (8, 6))\n",
"sns.countplot(x=\"Pclass\", hue=\"Survived\", data=titanic_df)\n",
"ax.set_xticklabels([\"一等舱\",\"二等舱\",\"三等舱\"])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 34,
"id": "951bebda",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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tqRbt2559tlnc9ddd6WlpSUPPfRQRo4cmerq6nTr1q3t9bdt23ZgPwRdnoCFPejouYZ3fHknvuiBg1evXr3Sv3//DBgwIOecc07WrVuXAQMGtN169uyZ3r17p66uLm984xuTJBs2bMiwYcOSvHS9+ssuuyzLly/Ptm3b8sY3vjEf/OAHc99992XAgAE5/PDDM2vWrAp+QroCZyGAPdi2bVu6d++eY489NjU1NUmSp59+Ot26dWs7bGDLli2pqqrKH/7wh2zYsCEnnnhipk6dmsbGxtx111350Y9+lFNOOSV9+/bNiy++mBdeeCF9+vTJtm3b8qlPfSqf+tSnKvkRgS7oxRdfzFFHHZVFixalvr6+7fGjjjoq1113XaZMmdL22JIlS3LllVfm1FNPTc+ePbNs2bL06dMnvXr1yo033pjvf//7uf7667No0aIKfBK6IntgYQ92/BPa/fffn8ceeyyPPfZYzj777Fx44YVt9+fPn58d/y/4+OOPZ9SoUUmSI444IvX19fn3f//3XHjhhXnmmWcyb968vP3tb88zzzyT5557TrwCFXH33Xfn9a9/fbt4Xb58eTZt2pR3vetd7bZdvnx5297Y5KULCz3yyCN53/ve12nzwl+rqfQAcLDbunVrRo4cmbPPPjvdunXL9u3b89xzz+WQQw7JySefnOSlvbSDBw9Osusv+hNPPDFf/epXKzI/wK588Ytf3ClAb7311px99tk55JBD2j0+fPjwDBs2LIsXL07y0iFTX/nKV/KWt7yl3XGyyUvfmd26dXOpdw4oAQt7cOihh+axxx5ru79kyZK85S1vydNPP73Lq8H5ogcOds3NzXnPe96Tr371q/n+97+fyy67LG9/+9vzjW98Iw8//PBO259++ulJ0va9VlVVldNPPz2jRo3Ks88+m5aWlrzwwgsZMGBAtmzZku985zv5h3/4h079THQtAhb24L3vfW9++tOfpqqqKknafnT113tZd5g5c2YuuuiiJL7ogYNXbW1tPve5z2XatGm566678sUvfjEf+tCHcsIJJ+TII4/s8Ovs+J97x8DS2QQs7MG3v/3tdmcOmDFjRh555JF897vfbbfdcccdt9O5YP+aL3rgYFNdXZ2/+7u/y7Bhw9KjR4/U1dVl2LBh+fjHP54rrrgiffv2rfSIsEt+xAV70L1797Z43bhxY66//vqcc845O233xz/+Mccee2xnjwewV7Zt25Zf//rXufnmm/OP//iPedOb3pTRo0fn3nvvzYIFC3LPPffkpz/9aUaMGJFvfetbOz13x79CPf/88+3OKbvD9u3b8/zzz3fKZ6HrsgcWOqCxsTELFizItGnTcuqpp+b8889vt/7rX/86zz//fEaMGNH22Mu/6Hv27LnTsa7bt2/Pli1bcuihhx74DwGQ5Oc//3k+8IEP5OSTT86ZZ56Zm2++OYcddljb+sknn5zFixfnm9/8Zl73ute1e+7WrVvb/ru+vj6bN29uO71gkowaNSotLS1pbW3NmjVrDvhnoetyHljYjS1btuS9731v7r///rz1rW/NJZdcknPPPbfteNiWlpacc845ueeeezJp0qTceeedbc/9xCc+ke7du2fWrFk5/vjjd/qi3/F8X/QAsHcELOzBY489ln79+r3i8a2/+c1vUl1d3XbuVwDgwBKwAAAUxY+4AAAoioAFAKAoAhYAgKIIWAAAiiJgAQ5CDz/8cMaOHZvevXtn4sSJWbduXaVHAjhoCFiAg8zmzZszefLkXH755Vm5cmV69+6dyy+/vNJjARw0BCzAQWbVqlXZuHFjpk6dmqFDh2batGltF88AQMACHHSGDh2aqqqqTJ8+PVu3bs2b3/zmfO9730uSLFq0KKNHj06/fv1y0UUXpbm5OUnywx/+MIMGDcqmTZuSJO94xzvyL//yLxX7DAAHkoAFOMgMGjQot912W6699tocd9xxmTdvXpLk8ccfz+TJk/PJT34yy5Yty7Jly/KlL30pSXLGGWdk3LhxmTVrVhYtWpTVq1fn05/+dCU/BsAB40pcAAepxsbGfPnLX84XvvCFXHbZZamrq8sPfvCDLFmyJElyww035Kabbsr//M//JEmefPLJnHLKKRkwYECuvvrqnHPOOZUcH+CAEbAAB5n169dny5YtGTlyZJLk/vvvz9///d/nwgsvzPz589OrV68kybZt23LYYYflj3/8Y9tzp0yZkp///Od56qmn0q2bf2QDXpt8uwEcZL71rW/loosuars/YcKEdO/ePcOGDctZZ52VRx99NI8++miWL1+ee+65p227//3f/81DDz2UoUOH5utf/3olRgfoFAIW4CAzceLEPPTQQ7njjjuybt26TJ8+PUcddVTOP//8PPjgg1m9enWS5Ctf+UqmTp2aJGlpacnFF1+c6dOn5/rrr89nPvOZrF+/vpIfA+CAcQgBwEHo9ttvz/Tp07N+/fqcdNJJ+drXvpY3v/nNWbRoURoaGvLEE0/klFNOyQ033JDjjjsus2bNyrx58/KLX/wi1dXV+fCHP5yNGzfmu9/9bqU/CsB+J2ABACiKQwgAACiKgAUAoCgCFgCAoghYAACKImABACiKgAUAoCgCFgCAoghYAACKImABACiKgAUAoCj/D8AbPdVKSfxqAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 800x600 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"titanic_df[[\"Sex\", \"Survived\"]].groupby(['Sex'], as_index=False).mean()\n",
"\n",
"f, ax = plt.subplots(figsize = (8, 6))\n",
"sns.countplot(x=\"Sex\", hue=\"Survived\", data=titanic_df)\n",
"ax.set_xticklabels([\"男性\",\"女性\"])\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 35,
"id": "0a59e921",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" <th>IsAlone</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" <td>A/5 21171</td>\n",
" <td>7.2500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>PC 17599</td>\n",
" <td>71.2833</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>7.9250</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>113803</td>\n",
" <td>53.1000</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" <td>373450</td>\n",
" <td>8.0500</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Survived Pclass Sex Age Ticket Fare Cabin Embarked \\\n",
"0 0 3 male 1 A/5 21171 7.2500 NaN S \n",
"1 1 1 female 1 PC 17599 71.2833 C85 C \n",
"2 1 3 female 1 STON/O2. 3101282 7.9250 NaN S \n",
"3 1 1 female 1 113803 53.1000 C123 S \n",
"4 0 3 male 1 373450 8.0500 NaN S \n",
"\n",
" IsAlone \n",
"0 1 \n",
"1 1 \n",
"2 0 \n",
"3 1 \n",
"4 0 "
]
},
"execution_count": 35,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# Family = SibSp + Parch\n",
"titanic_df['FamilySize'] = titanic_df['SibSp'] + titanic_df['Parch']\n",
"titanic_df['IsAlone'] = 0\n",
"titanic_df.loc[titanic_df['FamilySize'] == 1, 'IsAlone'] = 1\n",
"\n",
"# 删除原有的列 Parch & SibSp\n",
"titanic_df.drop(['SibSp'], axis=1, inplace=True)\n",
"titanic_df.drop(['Parch'], axis=1, inplace=True)\n",
"titanic_df.drop(['FamilySize'], axis=1, inplace=True)\n",
"titanic_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 36,
"id": "8e54de19",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>FareLevel</th>\n",
" <th>Survived</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>(-0.001, 7.91]</td>\n",
" <td>0.197309</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>(7.91, 14.454]</td>\n",
" <td>0.303571</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>(14.454, 31.0]</td>\n",
" <td>0.454955</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>(31.0, 512.329]</td>\n",
" <td>0.581081</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" FareLevel Survived\n",
"0 (-0.001, 7.91] 0.197309\n",
"1 (7.91, 14.454] 0.303571\n",
"2 (14.454, 31.0] 0.454955\n",
"3 (31.0, 512.329] 0.581081"
]
},
"execution_count": 36,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"titanic_df['FareLevel'] = pd.qcut(titanic_df['Fare'], 4)\n",
"titanic_df[['FareLevel', 'Survived']].groupby(['FareLevel'], as_index=False).mean().sort_values(by='FareLevel', ascending=True)"
]
},
{
"cell_type": "code",
"execution_count": 37,
"id": "80756027",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Survived</th>\n",
" <th>Pclass</th>\n",
" <th>Sex</th>\n",
" <th>Age</th>\n",
" <th>Ticket</th>\n",
" <th>Fare</th>\n",
" <th>Cabin</th>\n",
" <th>Embarked</th>\n",
" <th>IsAlone</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" <td>A/5 21171</td>\n",
" <td>0</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>PC 17599</td>\n",
" <td>3</td>\n",
" <td>C85</td>\n",
" <td>C</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>3</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>STON/O2. 3101282</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>female</td>\n",
" <td>1</td>\n",
" <td>113803</td>\n",
" <td>3</td>\n",
" <td>C123</td>\n",
" <td>S</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>3</td>\n",
" <td>male</td>\n",
" <td>1</td>\n",
" <td>373450</td>\n",
" <td>1</td>\n",
" <td>NaN</td>\n",
" <td>S</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Survived Pclass Sex Age Ticket Fare Cabin Embarked \\\n",
"0 0 3 male 1 A/5 21171 0 NaN S \n",
"1 1 1 female 1 PC 17599 3 C85 C \n",
"2 1 3 female 1 STON/O2. 3101282 1 NaN S \n",
"3 1 1 female 1 113803 3 C123 S \n",
"4 0 3 male 1 373450 1 NaN S \n",
"\n",
" IsAlone \n",
"0 1 \n",
"1 1 \n",
"2 0 \n",
"3 1 \n",
"4 0 "
]
},
"execution_count": 37,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"titanic_df.loc[titanic_df['Fare'] <= 7.91, 'Fare'] = 0\n",
"titanic_df.loc[(titanic_df['Fare'] > 7.91) & (titanic_df['Fare'] <= 14.454), 'Fare'] = 1\n",
"titanic_df.loc[(titanic_df['Fare'] > 14.454) & (titanic_df['Fare'] <= 31.0), 'Fare'] = 2\n",
"titanic_df.loc[titanic_df['Fare'] > 31.0, 'Fare'] = 3\n",
"titanic_df['Fare'] = titanic_df['Fare'].astype(int)\n",
"titanic_df.drop(['FareLevel'], axis=1, inplace=True)\n",
"titanic_df.head()"
]
},
{
"cell_type": "code",
"execution_count": 38,
"id": "acb02109",
"metadata": {},
"outputs": [],
"source": [
"# one-hot编码\n",
"sex_dummies_titanic = pd.get_dummies(titanic_df['Sex'])\n",
"sex_dummies_titanic.columns = ['男性', '女性']\n",
"titanic_df = titanic_df.join(sex_dummies_titanic)\n",
"\n",
"embark_dummies_titanic = pd.get_dummies(titanic_df['Embarked'])\n",
"embark_dummies_titanic.columns = ['港口S', '港口C','港口Q']\n",
"titanic_df = titanic_df.join(embark_dummies_titanic)\n",
"\n",
"class_dummies_titanic = pd.get_dummies(titanic_df['Pclass'])\n",
"class_dummies_titanic.columns = ['一等舱', '二等舱', '三等舱']\n",
"titanic_df = titanic_df.join(class_dummies_titanic)\n",
"\n",
"age_dummies_titanic = pd.get_dummies(titanic_df['Age'])\n",
"age_dummies_titanic.columns = ['孩子', '少年', '中年','老人']\n",
"titanic_df = titanic_df.join(age_dummies_titanic)\n",
"\n",
"fare_dummies_titanic = pd.get_dummies(titanic_df['Fare'])\n",
"fare_dummies_titanic.columns = ['便宜票价', '普通票价', '高级票价','豪华票价']\n",
"titanic_df = titanic_df.join(fare_dummies_titanic)"
]
},
{
"cell_type": "code",
"execution_count": 39,
"id": "4f286dc6",
"metadata": {},
"outputs": [],
"source": [
"del titanic_df['Sex']\n",
"del titanic_df['Embarked']\n",
"del titanic_df['IsAlone']\n",
"del titanic_df['Pclass']\n",
"del titanic_df['Age']\n",
"del titanic_df['Fare']\n",
"del titanic_df['Cabin']\n",
"del titanic_df['Ticket']"
]
},
{
"cell_type": "code",
"execution_count": 40,
"id": "137577ed",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import train_test_split\n",
"from sklearn.metrics import precision_recall_curve, roc_auc_score, roc_curve\n",
"from sklearn.metrics import accuracy_score, mean_squared_error, r2_score, confusion_matrix\n",
"from sklearn.model_selection import GridSearchCV # 参数调优"
]
},
{
"cell_type": "code",
"execution_count": 41,
"id": "1bd2ffce",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Survived</th>\n",
" <th>男性</th>\n",
" <th>女性</th>\n",
" <th>港口S</th>\n",
" <th>港口C</th>\n",
" <th>港口Q</th>\n",
" <th>一等舱</th>\n",
" <th>二等舱</th>\n",
" <th>三等舱</th>\n",
" <th>孩子</th>\n",
" <th>少年</th>\n",
" <th>中年</th>\n",
" <th>老人</th>\n",
" <th>便宜票价</th>\n",
" <th>普通票价</th>\n",
" <th>高级票价</th>\n",
" <th>豪华票价</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" <td>1</td>\n",
" <td>0</td>\n",
" <td>0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Survived 男性 女性 港口S 港口C 港口Q 一等舱 二等舱 三等舱 孩子 少年 中年 老人 便宜票价 普通票价 \\\n",
"0 0 0 1 0 0 1 0 0 1 0 1 0 0 1 0 \n",
"1 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 \n",
"2 1 1 0 0 0 1 0 0 1 0 1 0 0 0 1 \n",
"3 1 1 0 0 0 1 1 0 0 0 1 0 0 0 0 \n",
"4 0 0 1 0 0 1 0 0 1 0 1 0 0 0 1 \n",
"\n",
" 高级票价 豪华票价 \n",
"0 0 0 \n",
"1 0 1 \n",
"2 0 0 \n",
"3 0 1 \n",
"4 0 0 "
]
},
"execution_count": 41,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"\n",
"dataset = titanic_df\n",
"# 观察数据\n",
"dataset.head()"
]
},
{
"cell_type": "code",
"execution_count": 42,
"id": "19abf05d",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<div>\n",
"<style scoped>\n",
" .dataframe tbody tr th:only-of-type {\n",
" vertical-align: middle;\n",
" }\n",
"\n",
" .dataframe tbody tr th {\n",
" vertical-align: top;\n",
" }\n",
"\n",
" .dataframe thead th {\n",
" text-align: right;\n",
" }\n",
"</style>\n",
"<table border=\"1\" class=\"dataframe\">\n",
" <thead>\n",
" <tr style=\"text-align: right;\">\n",
" <th></th>\n",
" <th>Survived</th>\n",
" <th>男性</th>\n",
" <th>女性</th>\n",
" <th>港口S</th>\n",
" <th>港口C</th>\n",
" <th>港口Q</th>\n",
" <th>一等舱</th>\n",
" <th>二等舱</th>\n",
" <th>三等舱</th>\n",
" <th>孩子</th>\n",
" <th>少年</th>\n",
" <th>中年</th>\n",
" <th>老人</th>\n",
" <th>便宜票价</th>\n",
" <th>普通票价</th>\n",
" <th>高级票价</th>\n",
" <th>豪华票价</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>count</th>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" <td>891.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>mean</th>\n",
" <td>0.383838</td>\n",
" <td>0.352413</td>\n",
" <td>0.647587</td>\n",
" <td>0.188552</td>\n",
" <td>0.086420</td>\n",
" <td>0.722783</td>\n",
" <td>0.242424</td>\n",
" <td>0.206510</td>\n",
" <td>0.551066</td>\n",
" <td>0.227834</td>\n",
" <td>0.585859</td>\n",
" <td>0.160494</td>\n",
" <td>0.025814</td>\n",
" <td>0.250281</td>\n",
" <td>0.243547</td>\n",
" <td>0.257015</td>\n",
" <td>0.249158</td>\n",
" </tr>\n",
" <tr>\n",
" <th>std</th>\n",
" <td>0.486592</td>\n",
" <td>0.477990</td>\n",
" <td>0.477990</td>\n",
" <td>0.391372</td>\n",
" <td>0.281141</td>\n",
" <td>0.447876</td>\n",
" <td>0.428790</td>\n",
" <td>0.405028</td>\n",
" <td>0.497665</td>\n",
" <td>0.419670</td>\n",
" <td>0.492850</td>\n",
" <td>0.367270</td>\n",
" <td>0.158668</td>\n",
" <td>0.433418</td>\n",
" <td>0.429463</td>\n",
" <td>0.437233</td>\n",
" <td>0.432769</td>\n",
" </tr>\n",
" <tr>\n",
" <th>min</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>25%</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>50%</th>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>75%</th>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.000000</td>\n",
" <td>0.500000</td>\n",
" <td>0.000000</td>\n",
" <td>1.000000</td>\n",
" <td>0.000000</td>\n",
" </tr>\n",
" <tr>\n",
" <th>max</th>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" <td>1.000000</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
],
"text/plain": [
" Survived 男性 女性 港口S 港口C 港口Q \\\n",
"count 891.000000 891.000000 891.000000 891.000000 891.000000 891.000000 \n",
"mean 0.383838 0.352413 0.647587 0.188552 0.086420 0.722783 \n",
"std 0.486592 0.477990 0.477990 0.391372 0.281141 0.447876 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"50% 0.000000 0.000000 1.000000 0.000000 0.000000 1.000000 \n",
"75% 1.000000 1.000000 1.000000 0.000000 0.000000 1.000000 \n",
"max 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 \n",
"\n",
" 一等舱 二等舱 三等舱 孩子 少年 中年 \\\n",
"count 891.000000 891.000000 891.000000 891.000000 891.000000 891.000000 \n",
"mean 0.242424 0.206510 0.551066 0.227834 0.585859 0.160494 \n",
"std 0.428790 0.405028 0.497665 0.419670 0.492850 0.367270 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 0.000000 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"50% 0.000000 0.000000 1.000000 0.000000 1.000000 0.000000 \n",
"75% 0.000000 0.000000 1.000000 0.000000 1.000000 0.000000 \n",
"max 1.000000 1.000000 1.000000 1.000000 1.000000 1.000000 \n",
"\n",
" 老人 便宜票价 普通票价 高级票价 豪华票价 \n",
"count 891.000000 891.000000 891.000000 891.000000 891.000000 \n",
"mean 0.025814 0.250281 0.243547 0.257015 0.249158 \n",
"std 0.158668 0.433418 0.429463 0.437233 0.432769 \n",
"min 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"25% 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"50% 0.000000 0.000000 0.000000 0.000000 0.000000 \n",
"75% 0.000000 0.500000 0.000000 1.000000 0.000000 \n",
"max 1.000000 1.000000 1.000000 1.000000 1.000000 "
]
},
"execution_count": 42,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"dataset.describe()"
]
},
{
"cell_type": "code",
"execution_count": 54,
"id": "f78aaf7e",
"metadata": {},
"outputs": [],
"source": [
"# 获得数据集的特征(输入变量)和输出\n",
"x = np.array(dataset.iloc[:, 1:])\n",
"y = np.array(dataset.iloc[:, 0])\n",
"# 分割数据集\n",
"x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3, random_state=33)"
]
},
{
"cell_type": "code",
"execution_count": 55,
"id": "8f553d2e",
"metadata": {},
"outputs": [],
"source": [
"# 绘制混淆矩阵函数\n",
"def plot_confusion_matrix(cm, classes,\n",
" normalize=False,\n",
" title='Confusion matrix',\n",
" cmap=plt.cm.Blues):\n",
" plt.figure()\n",
" plt.imshow(cm, interpolation='nearest', cmap=cmap)\n",
" plt.title(title)\n",
" plt.colorbar()\n",
" tick_marks = np.arange(len(classes))\n",
" plt.xticks(tick_marks, classes, rotation=45)\n",
" plt.yticks(tick_marks, classes)\n",
"\n",
" fmt = '.2f' if normalize else 'd'\n",
" thresh = cm.max() / 2.\n",
" for i, j in itertools.product(range(cm.shape[0]), range(cm.shape[1])):\n",
" plt.text(j, i, format(cm[i, j], fmt),\n",
" horizontalalignment=\"center\",\n",
" color=\"white\" if cm[i, j] > thresh else \"black\")\n",
"\n",
" plt.tight_layout()\n",
" plt.ylabel('True label')\n",
" plt.xlabel('Predicted label')\n",
" plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 106,
"id": "8a7c618f",
"metadata": {},
"outputs": [],
"source": [
"def model_performance_evaluation(model_name, test, pred):\n",
" print(model_name, '| 准确率: %.4f' % accuracy_score(test, pred))\n",
" print(model_name,'| 均方误差: %.4f' % mean_squared_error(test, pred))\n",
" print(model_name, '| R2-score: %.4f' % r2_score(test, pred))\n",
" print(model_name, '| 混淆矩阵:\\n', confusion_matrix(test, pred))\n"
]
},
{
"cell_type": "markdown",
"id": "4c4b4e26",
"metadata": {},
"source": [
" 决策树"
]
},
{
"cell_type": "code",
"execution_count": 107,
"id": "ad94e103",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.tree import DecisionTreeClassifier, export_graphviz\n",
"params_dt = {'criterion':['entropy','gini'], 'splitter':['best', 'random']}"
]
},
{
"cell_type": "code",
"execution_count": 108,
"id": "54831ec7",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-7 {color: black;background-color: white;}#sk-container-id-7 pre{padding: 0;}#sk-container-id-7 div.sk-toggleable {background-color: white;}#sk-container-id-7 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-7 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-7 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-7 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-7 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-7 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-7 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-7 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-7 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-7 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-7 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-7 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-7 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-7 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-7 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-7 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-7 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-7 div.sk-item {position: relative;z-index: 1;}#sk-container-id-7 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-7 div.sk-item::before, #sk-container-id-7 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-7 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-7 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-7 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-7 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-7 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-7 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-7 div.sk-label-container {text-align: center;}#sk-container-id-7 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-7 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-7\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>DecisionTreeClassifier(criterion=&#x27;entropy&#x27;, splitter=&#x27;random&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-7\" type=\"checkbox\" checked><label for=\"sk-estimator-id-7\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">DecisionTreeClassifier</label><div class=\"sk-toggleable__content\"><pre>DecisionTreeClassifier(criterion=&#x27;entropy&#x27;, splitter=&#x27;random&#x27;)</pre></div></div></div></div></div>"
],
"text/plain": [
"DecisionTreeClassifier(criterion='entropy', splitter='random')"
]
},
"execution_count": 108,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"base_line_model = DecisionTreeClassifier()\n",
"dtc = GridSearchCV(estimator=base_line_model, param_grid=params_dt, cv=5, n_jobs=3)\n",
"dtc.fit(x_train, y_train)\n",
"y_pred_dt = dtc.predict(x_test)\n",
"dtc.best_estimator_"
]
},
{
"cell_type": "code",
"execution_count": 109,
"id": "ffd27ed2",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"决策树模型在 训练集 上的性能 -- \n",
"DecisionTree | 准确率: 0.8411\n",
"DecisionTree | 均方误差: 0.1589\n",
"DecisionTree | R2-score: 0.3269\n",
"DecisionTree | 混淆矩阵:\n",
" [[350 35]\n",
" [ 64 174]]\n",
"\n",
"\n",
"\n",
"决策树模型在 测试集 上的性能 -- \n",
"DecisionTree | 准确率: 0.8470\n",
"DecisionTree | 均方误差: 0.1530\n",
"DecisionTree | R2-score: 0.3558\n",
"DecisionTree | 混淆矩阵:\n",
" [[151 13]\n",
" [ 28 76]]\n"
]
}
],
"source": [
"# 模型性能评估\n",
"print(\"决策树模型在 训练集 上的性能 -- \")\n",
"model_performance_evaluation('DecisionTree', y_train, dtc.predict(x_train))\n",
"print(\"\\n\"*2)\n",
"\n",
"print(\"决策树模型在 测试集 上的性能 -- \")\n",
"model_performance_evaluation('DecisionTree', y_test, y_pred_dt)"
]
},
{
"cell_type": "code",
"execution_count": 110,
"id": "2acbe3b7",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAh4AAAHnCAYAAAD3tlQGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA52klEQVR4nO3deXQUZdr38V9lN0C2IYBZgCQgChKRGMkDihsoCEgUBUSFMCICOopiVBRHfHUCCEadUcAoEvER0XFh8REYRUAcJ0hQkJAMezAssolZCEkg6fcPhh5btjSp7uqkvx9OHem7qu+6KucAl9e9lGGz2WwCAABwAx+rAwAAAN6DxAMAALgNiQcAAHAbEg8AAOA2JB4AAMBtSDwAAIDbkHgAAAC3IfEAAABuQ+IBAADchsQDDdbnn3+uxMREBQUFKTk5Wd99951L7rNx40Z169ZNQUFBatasmRYvXmz6Pa699lpNnDjR9H7rI8MwtGLFCqvDAHCeSDzQIH3zzTfq37+/rrzySi1ZskSXXHKJbrrpJh0+fNj0e917772Kjo7Wl19+qddee01hYWGm3+ONN97QyJEjTe/XndatW6dXXnmlzv2sWbNGSUlJdQ8IgCUM3tWChujqq69WaWmpfvjhBxmGoaqqKrVo0ULp6ekaP368qfcKCAjQZ599phtvvNHUfhua7OxsTZw4UYWFhVaHAsBCVDzQ4Bw8eFD//Oc/NWDAABmGIelEctCxY0fl5eWZfr9jx44pICDA9H4BoCEi8UCDk5eXJ5vNpnbt2jm0v/zyy3rkkUfsn5cuXapOnTopMDBQHTp00Keffmo/l52drdatW2vTpk3q3r27goODlZiYqNzcXEnSihUrZBiGPbG57rrrZBiGWrdube+jdevWys7Odojh93M1PvnkEyUmJio4OFitWrXS1KlTT/tMZ5vjkZmZqVatWikoKEg33HCDQ3KVlpamtLQ0LVq0SJdccokaNWqk3r176+DBg2f8+f1WWlqabr/9dvXr10/BwcF67bXXNGrUKAUHB2vYsGH265YuXaqkpCQFBwerdevWDkMqaWlpMgxDw4cP186dO+0/t98/z8m5G5999pm6dOlyxgrS6eZ4/PzzzwoPD9dzzz1nbxswYIAuvfRSHTt2rFbPCsA9SDzQ4Ozfv1+SFBER4dDeuXNnXXHFFZJOJA59+vTRFVdcoc8//1w9evTQgAEDtGjRIvv1ZWVl6tWrl3r16qUFCxZIkkaNGiVJSkpK0po1a7RmzRpJ0syZM7VmzRqH75/L1q1bNXDgQF111VVaunSpHnvsMT355JNasmRJrft4/vnnNX78eD3wwANauHChfHx81L17d/3000/2a3JzczV69Gg9/fTTmj17tr799ltNnjy51veYP3++brnlFg0YMEB/+tOf5Ofnp7/85S+aM2eODhw4oB07dqh///5q3769/vGPf+jJJ5/UuHHjtGrVKknSxIkTtWbNGj377LO68MIL7T+3081Z+fvf/64RI0bopptusv+sa6NFixaaMmWKpk6dqj179ujrr7/W/PnzlZWVJX9//1r3A8ANbEADM2fOHJsk27Jly854zTXXXGPr1q2bQ9vNN99s69Spk81ms9lmz55tk2R76aWX7Oc//PBDm5+f3yl9SbItX778lPZWrVrZZs+efcp9n332WZvNZrMtX77cJsmWk5NjP//FF1/Ytm3bdtp4T37vpCNHjtiCg4NtTz31lL2ttLTU1qxZM9vYsWNtNpvNNmzYMJthGLY1a9bYrxkzZoytR48ep9zjdIYNG2br2bOnzWaz2d5++21bo0aNbFVVVbbt27fbJNl27Nhh27x5s23GjBm2kpISewwxMTG2KVOmOPQ1e/ZsW6tWrc54L0m2iIgI25YtW84a05l+3jU1NbZu3brZhg4dauvcubNt9OjRtXpGAO5FxQMNTuPGjSVJR44ccWh/4okn9Oijj0o6sTLihhtucDh/ww03aP369fbSvI+Pj0aPHm0/HxkZqePHj9cptpqaGvvvu3btqs6dO6t379668847lZmZqYSEBMXHx9eqr40bN6q8vFw9evSwtzVu3FhdunSxV2IkKSUlxV7pOfkczgw/REVFSToxxNG0aVP5+/vbh5gkqW3bturWrZsmTZqkq6++Ws2aNdPu3btVXl5e63uc9Pjjj6tNmzZOf+9kfFlZWXr//fe1d+9ep6o6ANyHxAMNTtu2bSVJ27dvd2j/5z//qd27d0uSbDabwz+e0olEw2azyfafhV5RUVG64IILTI2tqKjI/vuAgADl5ORo7ty5atOmjd577z1dfPHFtd6j4mScZ3qOkxISEuoe+FksWrRInTt3VmFhodLS0rRmzRp17979vPrq0qVLnWLZt2+fqqurVVZWpuLi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YCEfw5CPSaUKs/pxJRIPAAAs5G1DLbVKPK677rpaTVj56quv6hwQAABouGqVeKSlpbk4DAAAvBOrWk5j2LBhro4DAACv5G1DLaxqAQAAbsPkUgAALORtq1qcrngcO3ZMGRkZ6tKli6Kjo7Vx40ZdeeWV2rZtmyviAwAADYjTiceYMWP08ccf695771VpaamCg4OVkpKi+++/3xXxAQDQoBkmH57O6aGWjz76SN9//73i4uL0xBNPyNfXV48++qg6duzoivgAAGjQvG1Vi9MVj9jYWH399dcObVu3blVcXJxpQQEAgIbJ6YrHiy++qNTUVL3xxhsqLy/XY489plWrVumdd95xRXwAADRoPsaJw6y+PJ3TiUevXr20ceNGzZs3T506dVJMTIymTJlCxQMAgPPgbUMt57WcNiEhQU8//bTZsQAAgAbO6TkeR48e1ZNPPqk2bdqoUaNGio+P17hx41RWVuaK+AAAaPBO7l5a16M+cDrxGDlypJYtW6YpU6ZoxYoVeumll5STk8NyWgAAcE5OD7UsXLhQa9euVZs2bSRJycnJ6tixo5KTk00PDgCAhs7b5ng4XfHo3Lmzvv32W4e27777Tp06dTIrJgAAvMbJVS1mHZ6uVhWPP/7xj/bfh4SEaPjw4Zo5c6bi4uJUVFSkb7/9VjfddJPLggQAAA1DrRKPVq1aOfy+c+fO9s8XXXSRbrjhBvMjAwDAC3jbUEutEo9nn332nNdUVVXVORgAALyNme9Y8fy04zwml+7du1cvvPCCNm/erOrqakmSzWbTv//9b+3du9f0AAEAQMPh9OTSu+++W/v27dMFF1ygCy64QHfccYc2bdqk0aNHuyI+AAAaNB/DMPXwdE4nHt99951ef/11PfbYYyouLtbo0aM1a9YsLVmyxBXxAQCABsTpxCMqKkpffvmlkpOTtXHjRh09elSXXnqpNmzY4Ir4AABo0MzatbS+7F7q9ByPSZMm6a677tKNN96o1NRUdezYUZLUrVs304MDAKChY1XLOdx2223as2ePQkJClJWVpblz56qsrExDhw51RXwAAKABOa+304aHh0uSfH19NWzYMFMDAgDAm5g5RFIPCh7nl3gAAABzmLkapUGuagEAADhftap4xMXF1WrCyvbt2+scEAAA3oShltPIzs52cRgAAHgnVrWcxjXXXOPqOJyyduFf1CQk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Qqe2sZzNq6++qgMHDmjfvn0KCAjQ448/rv3799vPFxUV2X+/e/duNW/e3B7nqFGjNHbsWEnSsWPHVFNTU+d4AHg+5ngAddSnTx/t3LlT3333nXx9fTVv3jz16tVLNptN/fv319KlS/X5559r48aN9vkW53LnnXdq1apVys7OVlFRkV544QU1a9bMnnRIUps2bbRkyRLt3btXy5Ytc/jeli1bJJ1IDIYPHy5J6t+/v9577z19++23Wr16td588806P3tZWZlsNpsOHjyouXPnasaMGQ7J0CeffKKlS5dqw4YNmj59un1ezNChQ7VgwQL9/PPPOn78uJ5++mk9/fTTdY4HgOcj8QDqKCwsTAsXLtRLL72kiy++WJ9++qkWLlwoPz8/JSUlKTMzU/fdd59uvvlm9e7du1Z9tm7dWgsWLFBmZqY6dOigX3/9VbNnz3a4Ztq0aVqyZIni4uL03HPPSToxfPLOO+/o0UcfVYcOHZSXl6f3339fknTbbbdpzJgx6t+/v4YNG2afd1IXDz/8sGw2my666CLNnj1b9957r30uiiTdcsstGj9+vLp3764bb7xRDzzwgCTp6quv1sSJE3XPPffo8ssvV1VVlcOkVAANl2FjDRsAAHATKh4AAMBtSDwAAIDbkHgAAAC3IfEAAABuQ+IBAADchsQDAAC4DYkHAABwGxIPAADgNiQeAADAbUg8AACA2/x/51RFSqHlyL0AAAAASUVORK5CYII=\n",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 计算混淆矩阵\n",
"cnf_matrix = confusion_matrix(y_test, y_pred_dt)\n",
"np.set_printoptions(precision=2) # 设置打印数量的阈值\n",
"class_names = [0, 1]\n",
"# 绘制混淆矩阵\n",
"plot_confusion_matrix(cnf_matrix, classes=class_names, title='Confusion matrix')"
]
},
{
"cell_type": "code",
"execution_count": 111,
"id": "173693f9",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"该支持向量机模型的AUC值为 0.825750469043152\n"
]
},
{
"data": {
"image/png": "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L+bPnw+RSASVSoXZs2fj5Zdfxtdff42jR4/iww8/RH5+Pm6++WaXvLc//vGP+Omnn2zH+/btQ3JycrvXNDU1QavVwmAw2B47ffq07WcgCAIeeughpKam2vVMxcbGQqFQ2I2TOnnyJDp37uyS93KlgupW1/HzwYcDm4mI6GL79+/HvHnz7NbxWb9+PfLy8vDrr79CpVKhX79+ePDBB/Huu+/aDVoGgM8++wz79u3DY489hr///e/YsmULrr76aowePRo333wz3nzzTdxxxx2282fMmAGxWIwZM2agoaEB9957L0aNGoXBgwfjtddew6FDh1odS9Osvr4eIpGoRR1tueeee/Dqq6/izjvvxJkzZ/Dpp59i586dAKyDt41GIyIiIuyu6dGjByIjI/Hwww8jOzsb+/fvx7p167B582YAwJw5c/DTTz/h+++/t902CwkJQUhICO655x5MmzYNb7zxBs6ePYsFCxZg8uTJDtXqbkHW43NhDR8iIqJmvXr1wpIlS3DbbbcBsI6/efDBB/HBBx8gPT0dsbGx+OKLL7Bjxw706dMHb7/9NqqqqgBYQ9P//d//IScnB+vWrcOUKVMgCAIGDhyI//73v1Cr1XjwwQcxduxYLFmyBEaj0TYzzGw2Q6vV4pprrsFrr70GABg+fDiefvppANaBya154oknMHPmTIff3+TJkxEdHY3k5GRkZWVhwoQJ6NevHwBg7dq1rQ46Dg8Px/r163Hs2DE89NBDePfdd/HPf/4TI0aMAAAsWbIEpaWl6Ny5MyIiIhAREYF58+YBAJYtW4bExET86U9/wu23347bbrsN06dPd7het3LZxHgf1ryOz63/3Cx0fuFL4ev/lnu7pKAVSGuVBAK2h+8IpLZob10WfzBx4kQhLi5O2Lp1a4vvVVRUCA8//LCQlpYmaDQaoaqqShg+fLjw97//3W69m+HDhwsbN260u+71118X3n//fbvnS05OFgoKClqtY/Xq1YJcLheWLVvmkvfV1NQkbNu2Tfj+++9d8nyuwnV83Ki4ug6Agre6iIioTf/4xz8wa9YspKent/heXFwcli9fjsbGRtvg4H//+98tzrv0sbi4OOTk5LQ4r7S0tM06xo0bh3vvvfeyg5AdJZFIMHToUJc8lz8LquBTb7RAFipC55gwb5dCREQ+KikpyW4/rda4Koy050q2qKC2BdUY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rbjmmmuwfPly2+O//fYbrrnmGgwdOhTffPMNlErlZduosrISRqMR9957r62WiooKh2shCnYMPkQBau3atdi5cydKS0vxww8/YMyYMQ5dp9FoEBUVhe+//x5nz55Fp06d8Ne//hUAkJKSgilTpth6l/bv34+VK1c69LwqlQpdunRpMRA7LS3NFqwAoKioCGlpaQCsOzCPGTMGBw8eREFBAX766Sdbb9DliMXiDo0/uvvuu7F582a721yA9b2/9957du/9qaeecuq5H3/8cSxfvtw2hunhhx9GTk4OTp48idWrV9tCa3vvIS4uDnK5HF9//bVdLRfXSkRtY/AhClDNYz6qq6uxefNmzJ0716EgUFVVhVtuuQVbtmyBTqeDWCy2fVBPnDgRn3/+Oc6cOYOmpia89NJLeOmll66ozsceewxLlizBzp078dtvv2H27Nm2qe7btm3D2LFj8dtvv6GxsREikchWy+Wkp6ejvLwcv/76K44dO4bffvvNoevuuecebNq0CXv37sXQoUNtjz/44IPIy8uDyWSCRqPB3XffjQ0bNjj1XsePHw+dToctW7YAsLaRwWDAiRMnMGXKFJw9e9aujTIyMnDgwAEcO3YMhYWFOHz4MMRiMR544AG8++67EIlEKCkpwc0334yff/7ZqVqIghWDD1GAmjhxIjIzM9GzZ0/MmTMHkydPxuHDh2EwGNq9rkePHnjttdfw+OOPIz09Hb///jteffVVANZBurNnz8aECRPwhz/8AY2NjVi6dOkV1Xn33Xfj5ZdfxsSJE3H77bfj/vvvt/WkTJo0CUOGDMHIkSPRt29fZGZm2gYGX05KSgpeffVVjBw5Etdeey1++OEHh64bMGAA9u/fjyFDhkAmk9kef+GFF9CnTx8MHjwYt956K0aNGuVwLc2USiUmTpxoG9/05ptvYtGiRRgwYABiYmKQlZVlF9AGDRqEhx9+GP369cPgwYNx+PBhAMDrr78OiUSCa6+9FuPGjcO0adMwevRop2ohClYigUuIEhERUZBgjw8REREFDQYfIiIiChoMPkRERBQ0GHyIiIgoaDD4EBERUdBg8CEiIqKgweBDREREQYPBh4iIiIIGgw8REREFDQYfIiIiChoMPkRERBQ0/h/0NidX9gzsEAAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 绘制ROC曲线并计算AUC值\n",
"auc_dt = roc_auc_score(y_test, y_pred_dt)\n",
"print(f\"该支持向量机模型的AUC值为 {auc_dt}\")\n",
"fpr_dt, tpr_dt, thresholds = roc_curve(y_test, y_pred_dt)\n",
"plt.plot(fpr_dt, tpr_dt, label=\"决策树: \"+str(round(auc_dt, 3)))\n",
"#plt.plot(fpr_lr, tpr_lr, label=\"对数几率模型: \"+str(round(auc_lr, 3)))\n",
"plt.xlabel('False Positive Rate')\n",
"plt.ylabel('True Positive Rate')\n",
"plt.title('ROC')\n",
"plt.xlim([0,1])\n",
"plt.ylim([0,1.1])\n",
"plt.grid()\n",
"plt.legend(loc='lower right')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "2cba54ee",
"metadata": {},
"source": [
" 神经网络"
]
},
{
"cell_type": "code",
"execution_count": 112,
"id": "1307f4eb",
"metadata": {},
"outputs": [],
"source": [
"from sklearn.neural_network import MLPClassifier\n",
"params_mlp = {'solver':['sgd', 'lbfgs'], 'alpha': [1e-3, 1e-4], 'learning_rate_init':[1e-3, 1e-4] }"
]
},
{
"cell_type": "code",
"execution_count": 113,
"id": "ed44758e",
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"C:\\Users\\Admin\\anaconda3\\lib\\site-packages\\sklearn\\neural_network\\_multilayer_perceptron.py:541: ConvergenceWarning: lbfgs failed to converge (status=1):\n",
"STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n",
"\n",
"Increase the number of iterations (max_iter) or scale the data as shown in:\n",
" https://scikit-learn.org/stable/modules/preprocessing.html\n",
" self.n_iter_ = _check_optimize_result(\"lbfgs\", opt_res, self.max_iter)\n"
]
},
{
"data": {
"text/html": [
"<style>#sk-container-id-8 {color: black;background-color: white;}#sk-container-id-8 pre{padding: 0;}#sk-container-id-8 div.sk-toggleable {background-color: white;}#sk-container-id-8 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-8 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-8 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-8 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-8 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-8 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-8 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-8 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-8 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-8 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-8 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-8 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-8 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-8 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-8 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-8 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-8 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-8 div.sk-item {position: relative;z-index: 1;}#sk-container-id-8 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-8 div.sk-item::before, #sk-container-id-8 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-8 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-8 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-8 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-8 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-8 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-8 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-8 div.sk-label-container {text-align: center;}#sk-container-id-8 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-8 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-8\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>MLPClassifier(alpha=0.001, hidden_layer_sizes=(6, 6, 6),\n",
" learning_rate_init=0.0001, max_iter=1000, solver=&#x27;lbfgs&#x27;)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-8\" type=\"checkbox\" checked><label for=\"sk-estimator-id-8\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">MLPClassifier</label><div class=\"sk-toggleable__content\"><pre>MLPClassifier(alpha=0.001, hidden_layer_sizes=(6, 6, 6),\n",
" learning_rate_init=0.0001, max_iter=1000, solver=&#x27;lbfgs&#x27;)</pre></div></div></div></div></div>"
],
"text/plain": [
"MLPClassifier(alpha=0.001, hidden_layer_sizes=(6, 6, 6),\n",
" learning_rate_init=0.0001, max_iter=1000, solver='lbfgs')"
]
},
"execution_count": 113,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"# 神经网络训练模型\n",
"base_line_model = MLPClassifier(solver='lbfgs', alpha=1e-5, hidden_layer_sizes=(6, 6, 6), max_iter=1000)\n",
"mlp = GridSearchCV(estimator=base_line_model, param_grid=params_mlp, cv=5, n_jobs=3)\n",
"mlp.fit(x_train, y_train)\n",
"y_pred_nn = mlp.predict(x_test)\n",
"mlp.best_estimator_"
]
},
{
"cell_type": "code",
"execution_count": 114,
"id": "963a7373",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"神经网络模型在 训练集 上的性能 -- \n",
"Neural Network | 准确率: 0.8411\n",
"Neural Network | 均方误差: 0.1589\n",
"Neural Network | R2-score: 0.3269\n",
"Neural Network | 混淆矩阵:\n",
" [[346 39]\n",
" [ 60 178]]\n",
"\n",
"\n",
"\n",
"神经网络模型在 测试集 上的性能 -- \n",
"Neural Network | 准确率: 0.8470\n",
"Neural Network | 均方误差: 0.1530\n",
"Neural Network | R2-score: 0.3558\n",
"Neural Network | 混淆矩阵:\n",
" [[150 14]\n",
" [ 27 77]]\n"
]
}
],
"source": [
"# 模型性能评估\n",
"print(\"神经网络模型在 训练集 上的性能 -- \")\n",
"model_performance_evaluation('Neural Network', y_train, mlp.predict(x_train))\n",
"print(\"\\n\"*2)\n",
"\n",
"print(\"神经网络模型在 测试集 上的性能 -- \")\n",
"model_performance_evaluation('Neural Network', y_test, y_pred_nn)"
]
},
{
"cell_type": "code",
"execution_count": 115,
"id": "29b358fd",
"metadata": {},
"outputs": [
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAh4AAAHnCAYAAAD3tlQGAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAAA5EUlEQVR4nO3deVyVdd7/8fdhFxGBcUtABTQbHakkklvLNkvNjVbNUrHMtJrJNEqnGu1nIaZRzZQaZRIzmXW3mHqnjJmaTeOCpYlwu6O45BaxyKZwfn+Y5/aMG0euc64D5/X0cT0eXt/rOt/rc3g81I+f73JZrFarVQAAAC7gZXYAAADAc5B4AAAAlyHxAAAALkPiAQAAXIbEAwAAuAyJBwAAcBkSDwAA4DIkHgAAwGVIPAAAgMuQeKDB+uqrrxQbG6uAgADFx8dr/fr1TnnO1q1b1aNHDwUEBKhFixZaunSp4c+4+eabNWXKFMP7rY8sFotWrVpldhgALhOJBxqk7777ToMGDdL111+vZcuW6fe//7169+6twsJCw5/1yCOPKDw8XF9//bXeeusthYSEGP6Md955R6NHjza8X1fatGmT3njjjTr3s2HDBsXFxdU9IACmsPCuFjREN954o0pKSvTjjz/KYrGoqqpKrVq1UnJysiZNmmTos/z8/LRkyRLdcccdhvbb0GRkZGjKlCnKz883OxQAJqLigQbn2LFj+te//qV77rlHFotF0unkoEuXLsrJyTH8eSdPnpSfn5/h/QJAQ0TigQYnJydHVqtVHTt2tGt//fXX9fTTT9vOs7KydM0118jf31+dO3fWF198YbuWkZGhdu3aadu2berZs6cCAwMVGxur7OxsSdKqVatksVhsic0tt9wii8Widu3a2fpo166dMjIy7GL4z7kan3/+uWJjYxUYGKi2bdtqxowZ5/1OF5vjkZaWprZt2yogIEC33XabXXKVlJSkpKQkLV68WL///e/VuHFj9e3bV8eOHbvgz+9sSUlJuvfeezVgwAAFBgbqrbfe0pgxYxQYGKgRI0bY7svKylJcXJwCAwPVrl07uyGVpKQkWSwWjRw5Unv37rX93P7z+5yZu7FkyRJ169btghWk883x+PnnnxUaGqqXXnrJ1nbPPffoD3/4g06ePFmr7wrANUg80OAcOXJEkhQWFmbX3rVrV1133XWSTicO/fr103XXXaevvvpKvXr10j333KPFixfb7i8tLVWfPn3Up08fffnll5KkMWPGSJLi4uK0YcMGbdiwQZI0Z84cbdiwwe7zl7Jz507df//9uuGGG5SVlaVnnnlGEydO1LJly2rdx9SpUzVp0iQ98cQTWrRokby8vNSzZ0/t27fPdk92drbGjh2r559/XvPmzdP333+v1NTUWj9j4cKFGjhwoO655x798Y9/lI+Pj1555RVlZmbq6NGj2rNnjwYNGqROnTrpn//8pyZOnKgJEyZozZo1kqQpU6Zow4YNmjx5sq644grbz+18c1b++7//W6NGjVLv3r1tP+vaaNWqlaZPn64ZM2bo4MGD+vbbb7Vw4UKlp6fL19e31v0AcAEr0MBkZmZaJVlXrFhxwXtuuukma48ePeza7rzzTus111xjtVqt1nnz5lklWV977TXb9U8++cTq4+NzTl+SrCtXrjynvW3bttZ58+ad89zJkydbrVardeXKlVZJ1rVr19quL1++3Lpr167zxnvmc2ecOHHCGhgYaP3zn/9sayspKbG2aNHCOm7cOKvVarWOGDHCarFYrBs2bLDd8/jjj1t79ep1zjPOZ8SIEdbbb7/darVare+//761cePG1qqqKuvu3butkqx79uyxbt++3Tp79mxrcXGxLYaIiAjr9OnT7fqaN2+etW3bthd8liRrWFiYdceOHReN6UI/75qaGmuPHj2sw4cPt3bt2tU6duzYWn1HAK5FxQMNTlBQkCTpxIkTdu3PPfecxo8fL+n0yojbbrvN7vptt92mzZs320rzXl5eGjt2rO168+bNderUqTrFVlNTY/t99+7d1bVrV/Xt21cPPPCA0tLSFBMTo+jo6Fr1tXXrVpWVlalXr162tqCgIHXr1s1WiZGkhIQEW6XnzPdwZPihdevWkk4PcTRr1ky+vr62ISZJ6tChg3r06KFp06bpxhtvVIsWLXTgwAGVlZXV+hlnPPvss2rfvr3DnzsTX3p6uj766CMdOnTIoaoOANch8UCD06FDB0nS7t277dr/9a9/6cCBA5Ikq9Vq94+ndDrRsFqtsv620Kt169Zq1KiRobEVFBTYfu/n56e1a9dq/vz5at++vT788ENdddVVtd6j4kycF/oeZ8TExNQ98ItYvHixunbtqvz8fCUlJWnDhg3q2bPnZfXVrVu3OsVy+PBhVVdXq7S0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\n",
"text/plain": [
"<Figure size 640x480 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 计算混淆矩阵\n",
"cnf_matrix = confusion_matrix(y_test, y_pred_nn)\n",
"np.set_printoptions(precision=2) # 设置打印数量的阈值\n",
"class_names = [0, 1]\n",
"# 绘制混淆矩阵\n",
"plot_confusion_matrix(cnf_matrix, classes=class_names, title='Confusion matrix')"
]
},
{
"cell_type": "code",
"execution_count": 116,
"id": "aa8329f1",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"神经网络的AUC值为 0.8275093808630395\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAj4AAAHBCAYAAABpHrH9AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy88F64QAAAACXBIWXMAAA9hAAAPYQGoP6dpAABosElEQVR4nO3deVxVdf7H8de5l8sq+w7igiKZa5pmi5altthi2a9ptXXKshrHxilranJqymkxq6lmLCfb973JGmfc2stcEvcFRHBBELkgcLlwz+8P4CaCCgT3Xrjv5+Phw7mXc879HL4k7/me72KYpmkiIiIi4gcs3i5ARERExFMUfERERMRvKPiIiIiI31DwEREREb+h4CMiIiJ+Q8FHRERE/IaCj4iIiPgNBR8RERHxGwo+IiIi4jcUfETE5yxZsgTDMNx/4uLiuOCCC9iwYYP7mH//+98MHDiQ4OBgjj32WD744ING13n00UdJS0sjNDSUiy66iD179njyNkTEByn4iIjPevHFF/n+++955pln2LRpEyNHjqS4uJjvv/+eCRMm0L17dz766CP69u3L//3f//Htt9+6z501axZ33303v//97/nwww/ZsWMHv/nNb7x4NyLiCwzt1SUivmbJkiWMHj2ab7/9lhEjRgCwZs0aBg4cyEsvvcRHH33E119/zfbt2wkKCqKqqopu3bpx8skn895772G320lJSeH666/nySefBODHH39k+PDhfPPNN5x44onevD0R8SL1+IhIhzBgwACCgoLIy8tj6dKljBw5kqCgIAACAwMZNWoUS5cuBWDhwoUcOHCAiy++2H3+kCFDsFgsZGVleaV+EfENAd4uQESkOYqLi3E4HISFhVFUVES3bt0afL1r164UFRVRWlrKmjVrAMjMzHR/3Wq18sUXX5Cenu7RukXEt6jHR0R83t69e7ntttsIDAxkwoQJAISFhTU4pv51aWkpBQUFAMTExDQ4ZsyYMQo+In5OPT4i4rMOHosTHx/P66+/TkBA7T9bhw5PrH9tGAYOhwMAi0X/305EGtK/CiLis15++WVWrFhBWloaY8eOZeLEiURGRgJw4MCBBsfWv46IiKBLly5NHjNu3DheeeUVD1QuIr5KwUdEfFZGRgbHHXccd955J2+99RZbtmyhS5cuJCQksH379gbH7tixg4SEBMLCwsjIyABg27Zt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z3/mT3/6E0CDWUtPP/00U6dOxW63c99997F7926ee+45MjMz2bx5M5s3byY2NpYrrrjiV892uu+++1iyZAnLli1j0qRJXHXVVc067ze/+Q13330327Zt45ZbbuHCCy+ktLQUl8vFhRdeyNixY9mxYwe33norV155pXu9p8Od5wv8O/jUzejaZiZrRpeISCeQmZlJcXEx27ZtY/r06fTq1YuuXbtis9k46aSTGDFiBDabjVNOOYUBAwYQEPDLqi6///3vmTZtGj179uS+++7jz3/+s/trn3/+OZdddhl/+ctfCAxsPB40KCiI3/3ud2zfvp2lS5dy0kkncfzxx1NaWsqSJUsYMmRIg+PXrVvHG2+8wbRp03jmmWfYtGkT1113HVOmTCEmJobXXnuN559/HpfLxQ033PCrvicul4t//vOfPPjggwwaNIgbb7wRu93Oli1bjnheYWEhpaWlXHzxxSQnJzN58mQcDge7du0iJyeHcePG8cADD5CYmMjvf/97KioqWL9+/RHP8wV+vY5Pxa71hFA7lX20ZnSJiByVaZpUOD2/jUOIzdqi2T9Op5M5c+Zw9913Axx2PZ76ay5evJgXXniB5cuX88gjj1BWVsbKlStxuVzMnj2b1157jXfeeYdbbrmFyy+/nD/96U/YbDb3dbp168a9997LlClTWLFiBe+//z4//fQTd999N5s3b2b8+PH861//ch9f39NzyimnkJeXx8qVK/nwww+ZPHkyGzdu5LTTTiMwMJCvv/66yd6e0047jQkTJjB16tSjfi927NhBcXExp59+uvu94cOHs2LFCnr3Pvz41tjYWKxWK6+++ioXXXQRzz//PN26dSM9PZ2AgIAG45U2b67dAaFXr15HPM8X+HXwOZC3lhBgT2A3IoJtRz1eRMTfVThrOPa+Lzz+uev+ciahgc3/lfX4449TXFzMb37zG6A24HTt2hXTNCkuLiYuLg6n00nfvrXjO0eOHMl3331HQkICp512GnPnzuXLL79kxowZ9O/fnyVLlhAZGcmwYcM4//zz+eKLL/jmm28aBKqbb76Zf/zjH5x99tmEhoYya9YsMjIyuOqqqwgKargP5DPPPENkZCR/+9vfiIqKolu3btx+++3s2LGDZ555hpCQEKqqqnj33Xe5/vrrGy0g+emnnzYIXkdit9sJDQ0lISHB/V5ERAT5+flHPM8wDJ544gkuu+wy9z3873//a9BLVu+vf/0rEydOdH9Gc8/zBv9+1FVY+6jLEa3xPSIincXXX3/NfffdR5cuXTj33HOpqanBNE3y8vLYunUrCQkJFBYW8tFHH7nPCQgIYNiwYdx555389re/ZeTIkWRmZjJt2jTeffddIiMjAUhISODTTz/lgQceaNSLZJomFRUV/PDDD1RVVREXF0dUVFSTvU0ZGRkUFBTwySef8Ic//IE9e/Zw+umn069fP2JiYti4cSNfffUVP/74I8nJyYwZM6bBAOcuXbo0ClOHExAQ0OjY4ODgo84cKy0tZdq0abz66quUl5fz6quv8n//93+NBkZ/9tlnfPjhh/ztb39r0Xne4hvxyxtMk/DSbQAEJh3j5WJERDqGEJuVdX850yuf2xwrV67kvPPO4+qrr2bNmjUYhsF777132Cnp9evoOJ1OpkyZwsqVKznjjDO47777OOWUU3j77bd55JFHqKqqori4mNTUVBwOB59//nmja82dO5cBAwZQWFjI008/zb59+xg0aBCvv/4606ZNa3BsdnY2F1xwAampqVx55ZX079+fyy+/HMMwePvtt3n77bfdx1555ZVcfPHFrR7gHBMTQ0lJCU6n091LVFpaesRp/QCLFi0iOTmZK664AoCLL76Y119/nffff9/9iG3Xrl1cd911/P3vf3c/ymrOed7kv8GndBdBrnKqTQux3Y71djUiIh2CYRgteuTkaSkpKfz973+nT58+3Hrrrbz99ttER0dzzTXXNPmoKyOjtsffarWyefNmBgwYQF5eHgMGDODEE0/kkksuAWoHN8+aNYslS5Y0+bl79uxh5syZLFq0CKfTyc8//8xf/vIXfv75Z2bNmsWsWbMaHB8SEsLw4cMZOnQoxxxzDAMGDKB79+688847vPDCC5x22mkA3H///RiGwTnnnNPq70liYiJdu3blhx9+4OSTTwZg1apVDB8+/IjnVVdXs2fPngbv7dq1y93zVFlZycUXX+wOms09z9t896e3vdXN6NpuJtInJcbLxYiISFtITEzk8ssvZ/ny5QBER0cD0LdvX7799lvKysro27cve/bsYdu2be7FAy0WC4sXLwZqe39Wr15NUVERaWlpzfrcTz75hOuvv55+/fphmiaPPPIIjz76KN27d+eRRx4hODiYCy+80H18UlISr7zyCmvWrGHRokV89NFHPP/8800O4G6qp6esrAybzdbsx10TJ07kgQce4JNPPuHHH3/k22+/dU+/r6yspKamhrCwsAbnDBs2jL1793L77bdz8skns2TJEn788UfmzZsHwOTJkzlw4ACzZs2irKwMqH2EdrTzvM1vx/iU5dduVbHVTKF3QpejHC0iIh3ZTz/9RGBgIC6Xy/3YKz09nd/97ndA7aykiRMnctxxxxEbG8t111132N6dQ9XU1HDDDTfw0EMPAbW9Yq+//jo33ngjUBuksrKyyMnJcYeYb7/9li5dunDFFVdQUVHBlClT3Ne74oor3IsXPvXUU01ua3Huuefy3HPPNfv+77nnHvLz80lKSuK0005j5syZJCUlATBr1iz3Y6mDdevWjTfeeIPFixdz9dVX8+mnnzJ//nyOPfZY9u/fz0svvcTq1auJi4sjPDyc8PBwXn311SOe5wv8tsenLG8tXYCCoB4+3W0rIiKtExUV1ei9yspKKisrG73fs2dPRowYwe23387xxx+P0+nk8ssv57HHHiMgIACn00l5eTk9evSgpqYGl8tFfn4+VVVVTV7vYBUVFYwbN47+/ftz6qmnAnDCCSfw5ZdfMmzYsEbHvvbaaw0edTkcjkbXbG4oqxcbG8vy5ctZvHgxSUlJDB482P21+++//7DnXXTRRVx00UWN3o+KimoykB3tPF/gt7/xzbpHXY6oXl6uRERE2trxxx/f5ADkrl27NrmCcEBAANOnTwdqF/xzOp18+umnh13/p15gYOARAwBAamoqe/fubfCexWJpFHoA3n333QaDjo8USloqKCiIs846q82u11H5bfDpUjejy6Y9ukRExEfEx8d7u4ROzz/H+FQUE169D4CYbv29XIyIiIh4il8Gn/rHXDvNGNK7Jnm5GhEREfEUvww+9h1rAdhqppIeH3aUo0VERKSz8OvgUxDUneBmrgYqIiIiHZ9fBp9fZnQdfldaERER6Xz8MviE2bcCEJCoPbpERPzFmjVr2Lp16xGPsdvtTR6zefPmo05bl47B/4KPs4Jo524AorsN8HIxIiLS1oqKipp8/6mnnjrqase33nord9xxB6ZpUlNTg8PhwG63c/LJJ/Pee+8BtSs1HzhwoMF5aWlpfPXVV4e97ksvvcQFF1zQwjuR9uB3wce1dxMWTIrNLvTo1s3b5YiISBuy2+1kZmby4Ycfut+r36LCZrMRGhp62HMfffRRPvroI3788UfS0tJIT09n+vTpTJkyBcMwuOGGG4iJiXFvJ2G3293nhoaGEh8fT1FREdnZ2eTk5JCTk9Pgs5u7r9bR3HPPPURHRzNw4EB+/vnnZp2zdetWRo0aRWhoKL179+aNN95wf23Xrl2MGzeO4OBgEhMT+cc//tHo/KysLKKiosjNzW2Te/Amv1vAsHh7FrHUzugaFK89ukREOpOIiAgefvhhrrjiCr788ksiIyM59thjCQkJobKyEqvVyrPPPovD4eDcc891B4APPviAZ599lhUrVlBWVsZvfvMb1q1bx6pVq5gyZQqbNm1i/vz5fPnll7z77rvuz6uurgZq9+eyWq289tprPPvsswQEBLBhwwYqKyuxWCwEBgZisViorq4mIKD1v3r/+c9/8s9//pOPP/6Y4uJiLr30UlatWkVgYOARz/vtb3/LxIkTefvtt/n666+54oorGD58OL169WLSpEl0796dbdu28eWXX3L55ZczevRoMjMzATBNk5tuuok//vGPdOsMHQamHygpKTEBs7Cw0Nz29gzT/HOE+dlfL/Z2WX6pqqrK/PDDD82qqipvlyKm2sOX+GJbVFRUmOvWrTMrKip+edPlMk1Hmef/uFwtqn3q1KnmpEmTGrw3efJk88EHHzRN0zQfffRR88orr2zw9cLCQrOmpsasrq42P/30U7Ompsa85JJLzM8//9z99dzcXLOmpsZ0OBymaZrmP//5TzMlJcU0DMNMSkoy33nnHdM0TXPPnj1mjx49zOuuu85MS0szExMTzdDQUHPIkCEtuo9DDRo0yHz44YfdrydMmGAuXLjwqOeFhYWZBw4ccL/u1auX+cUXX5j79+83r7rqKrO6utr9tW7dupmvv/66+/Vzzz1n9u7d26ysrPxVtR9Okz9ndQoLC03ALCkpabPP87seH1dB7YyuikjN6BIRaTFnOTyU4vnPvXsnBDZ/3bVHH3200WDkqqoqgoOD3a8P3YfrxBNPpKKiAqvVisvlwmKxUFBQwJIlSwgJCXEf53K5OOGEE3jnnXe48cYbufDCC0lISODbb79l37593H///ZxxxhkMHDiQefPmAfDhhx/y5ptv8uabbzb4zGuuuYaoqCjmzJlz1HsyTZM1a9Ywd+5c93vDhw9nxYoVjBkz5ojn9u/fnyeffJLbb7+dzz//nH379jFs2DAiIyN5+eWX3ceVlJSwe/dueveu/R1ZUFDAjBkzmDRpEm+//TZjxowhOTn5qLX6Mr8LPqHuGV2ZXq5ERETai8PhYP/+/SQkJGC1WrFYLJSWljYY42MYBk6nk4CAAAzDYNOmTUBtsLHb7URERHDRRRcxefLkI27u+dlnnwHw5JNP8vDDD3Pbbbfx9ddfM2bMGB5//HH69z/81kjPPvsshmE0657KyspwuVz07NnT/V5ERIS77iOZPXs2I0eO5O6778YwDN566y2io6MbHffYY48xcOBA9waqf/7zn6mursZms/H9998zbdo03n//fUaOHNmsmn2RfwUfVzVxjh0ARGqPLhGRlrOF1va+eONzW+CVV17h5ZdfJj09nQ8++ICQkBBKSkr48MMPuffee92ztt566y2ysrLo1asXAFFRUSQmJmKxWLBarWzdupVVq1bRpUvtmND9+/dz+umnN+glmTdvHhaLha1bt/LII4/w/PPP069fPx544AGKioqYMWMG9957b5N1Hmmw9aHqxwYdPEg6ODiY8vLyI55n1o3Refjhh5kyZQo//vgjV1xxBT179uT44493H7d69Woef/xx/ve//wG14XH+/Pk88cQTTJ48GYDk5GTuvPNOvvnmm2bX7Wv8alaXa18uNqopN4Po3lM9PiIiLWYYtY+cPP2nmb0iUPsL++GHH+b3v/89r776KgcOHGD9+vXuWV3Lly+nqKiI/fv3U1FR4Q49UBsqFixYwLfffsurr75KdXU1jz76KFlZWWRlZfHAAw80CCuff/45e/fupXfv3jz44IPY7XZWrlxJly5dePTRRxk/fjwWi4XFixf/6m99SEgIISEh7N271/1eaWnpUQc2//zzz+zcuZM//vGPhIWFcdppp/Gb3/yGV1991X3MgQMHuOyyy7jzzjs58cQTgdplASorKznnnHPcxw0ZMoTs7OxffS/e5FfBZ1/dVhXZJJMWqxldIiKd0axZs0hKSuL//u//3O899NBDnH322Vx77bXcfPPN1NTUNHlu/Syt7OxsLrzwQqKjo5k6dSqrV6/mpZde4v77728QlFasWMHDDz+MYRhERERw//33c9999/HZZ5+xefNm3njjDRYuXMjpp5/eJvd2/PHH891337lfr1q1itTU1COeU11dTUlJCZWVle73du3a5f4emKbJNddcQ1paWoOeqbi4OIKDg6moqHC/t337drp3794m9+ItfvWoqzRvAwB7g7rTz9L8//cgIiIdw+rVq3nooYcarOPz/vvvM3/+fH766SciIiIYOnQoV199Nc8//3yDQcsA7733HqtWreKmm25i5syZ/Oc//2HQoEGce+65nH766Tz11FOcf/757uPvuusuLBYLd911FxUVFVxyySWMHz+ekSNH8vjjj7N+/fomx9LUKy8vxzCMRnUczsUXX8wjjzzCBRdcwO7du3n33XdZunQpUDt42+FwEB4e3uCczMxMoqKiuO6665gwYQKrV6/m7bffZsGCBQDMnDmT7777jq+//tr92CwwMJDAwEAuvvhi7rjjDp588kn27NnDrFmzuOmmm5pVq6/yqx4fV+EWAMo1o0tEpFM69thjmTNnDmeffTYAzz33HFdddRWvvvoq6enpxMXF8cknn7BkyRIGDBjAM888Q2FhIVAbmv7+978zbdo0XnzxRSZPnoxpmpx44on8/PPPREZGcvXVVzNx4kTmzJmDw+FwzwyrqamhpKSEwYMH8/jjjwMwduxYbr/9dqB2YHJTbrnlFmbMmNHs+7vpppuIiYkhNTWV/v37c9VVVzF06FAAXn/99SYHHXfp0oX333+fLVu2cM011/D888/zt7/9jXHjxgEwZ84c8vLy6N69O+Hh4YSHh/PQQw+5v3/JycmccMIJnHPOOZx99tlMnz692fX6pDabGO/D6tfx+fm+Iab55wjz87f/6e2S/JYvrlXiz9QevsMX2+JI66t0BFdffbWZkJDQ5Do3BQUF5nXXXWd269bNLCoqMgsLC82xY8eaf/nLX8zS0lKzuLjYrKmpMceOHWt++OGHDc574oknzH/9618NrpeammpmZWU1Wccrr7xiBgUFmc8991yb3Fd1dbW5aNEi8+uvv26T63mb1vFpR3FVOyAIorr183YpIiLSzh566CEeffRR4uPjG30tPj6eefPmUVVV5R4c/J///Af4ZTr7we8dfN7UqVMbXS8vL++wdVx66aVccsklRx2E3FxWq5XRo0e3ybX8kV8FnzAqqTatpPZS8BER6exSUo6+0GJbhZEj+TVbVEjb86sxPgC5JJEaG+ntMkRERMQL/C74FAR1b/YqmSIiQqOtH0Takqd/vvwu+JRH9Dr6QSIigs1mAzjqysAiv0b9z1f9z1t787sHj9bEY7xdgohIh2C1WomKiqKgoACo3V7BH3rMXS4XVVVVVFZWNtrIVNqOaZqUl5dTUFBAVFQUVqvVI5/rd8EnIk0Dm0VEmispKQnAHX78gWmaVFRUEBIS4hdBz9uioqLcP2ee4HfBp2vvQd4uQUSkwzAMg+TkZBISEnA6nd4uxyOcTifLli1j1KhRHnv84q9sNpvHenrq+VXw2U0MGbEx3i5DRKTDsVqtHv8F5S1Wq5Xq6mqCg4MVfDohrzy8zMrKYtiwYURHRzN9+vRmjeheunQpffv2JS4ujtmzZ7fqcwtsaeq2FBER8WMeDz4Oh4PzzjuPoUOHsnz5ctatW8f8+fOPeM7evXs5//zzueyyy/j222957bXXWLx4cYs/u7xLj9YVLSIiIp2Cx4PPggULKCkpYfbs2fTq1YuHHnqIefPmHfGc1157jeTkZO69914yMjK47777jnpOU4w4bU4qIiLizzw+xmf16tWMGDGC0NBQAAYOHMi6deuOes7pp5/ufkw1fPjwI+5m63A4cDgc7tclJSUA1ER0paio6NfegvwKTqeT8vJyioqK9OzcB6g9fIfawneoLXzHvn37gLZd5NDjwcdut9OzZ0/3a8MwsFqtFBcXEx0dfdhzjj32WPfriIgI8vPzD/sZDz/8MDNnzmz0/tn/dwNwQ+uLFxEREY8rKioiMrJttpvyePAJCAggKCiowXvBwcGUl5cfNvgcek798YczY8YMpk2b5n69f/9+unfvTm5ubpt946R17HY7aWlp7Nixg4iICG+X4/fUHr5DbeE71Ba+o6SkhG7duhET03Yzsj0efGJiYsjKymrwXmlp6RF3yI2JiWHv3r3NPj4oKKhRuAKIjIzUD7GPiIiIUFv4ELWH71Bb+A61he9oyxW0PT64ediwYXz33Xfu1zk5OTgcjiOmuUPPWbVqFampqe1ap4iIiHQ+Hg8+o0aNoqSkhJdffhmAWbNmMWbMGKxWK3a7vcmVQc8//3y++uorFi9eTHV1NY899hhnnnmmp0sXERGRDs4rY3zmzp3L5ZdfzvTp06mpqWHp0qVA7QyvOXPmMGHChAbnxMXF8fjjj3PmmWcSGRlJWFhYi6azBwUF8ec//7nJx1/iWWoL36L28B1qC9+htvAd7dEWhtmWc8RaID8/n+XLl3PSSScRHx/frHO2bNnC+vXrOfXUU/XcVURERFrMa8FHRERExNO8sleXiIiIiDco+IiIiIjf6BTBx1u7vUtjrWmLuXPnkpycjM1mY9y4cezatcsDlfqH1rRHPafTyYABA1iyZEn7FehHfk1bXHrppdx2223tWJ1/aU1bPProoyQmJhIREcHEiRO1/VEbKioqomfPnuTk5DTr+F/7+7vDBx9v7vYuDbWmLb766ivuvfdeXnnlFbKzs6msrOQPf/iDZwru5FrTHgd75JFHGi02Kq3za9riiy++YNGiRTzwwAPtW6SfaE1bLFu2jJdeeolly5axYsUKKisrueOOOzxTcCdXWFjIueee2+zQ0ya/v80O7oMPPjCjo6PNAwcOmKZpmqtWrTJPPvnkI57zxBNPmJmZmabL5TJN0zQ//PBD84orrmj3Wju71rTFCy+8YL733nvu1//617/MPn36tGud/qI17VFv06ZNZlRUlNmjRw9z8eLF7Vilf2htW5SXl5vp6enmvHnz2rtEv9Gatnj00UfN6dOnu1+/8sor5oknntiudfqLM844w5wzZ44JmNnZ2Uc9vi1+f3f4Hp+22u19xYoV7V5rZ9eatrj++uu56KKL3K83btxI796927VOf9Ga9qh30003cdddd9G9e/f2LNFvtLYtHnjgASoqKggICGDRokVtukO1v2pNW/Tv35/333+frVu3UlBQwLx58xg7dqwnyu305s6dy+9+97tmH98Wv787fPA50m7vzT3naLu9S/O0pi0OVlRUxD//+U9uueWW9irRr7S2PV588UVKSkrUld+GWtMWubm5zJ49m969e5Obm8v06dO56KKLFH5+pda0xVlnnUVGRga9e/cmMTGRAwcOcNddd3mi3E4vPT29Rce3xe/vDh98jrTbe3PPOdrx0jytaYuD3XLLLZx00kmMHz++PcrzO61pj7179zJjxgzmzZtHQIDHF3bvtFrTFvPnzycxMZGFCxfypz/9iSVLlrB06VIWLlzY3uV2aq1pi7fffpvt27ezYcMGioqK6N+/P1deeWV7lypNaIvf3x3+XzZP7PYuzdOatqj3r3/9i2XLlrFq1ap2qs7/tKY9pk6dyvXXX8/gwYPbuTr/0pq2yMvL44wzznD/Ix8eHk5GRgbZ2dntWmtn15q2eOONN7j55pvJzMwEYM6cOURGRrJ//36ioqLas1w5RFv8/u7wPT7a7d13tKYtAH744QemTp3Km2++SWJiYnuX6Tda0x6vv/46Tz/9NFFRUURFRfHVV19x7rnnMmvWLE+U3Gm1pi3S0tKoqKhwv3a5XOTl5Wnc1a/Umraorq5mz5497tf1S27U1NS0X6HSpDb5/d3yMdi+xel0mvHx8eZLL71kmqZp3nTTTea5555rmqZplpSUmFVVVY3O2bt3rxkcHGwuWrTIdDqd5vjx481bb73Vo3V3Rq1pi927d5sJCQnmgw8+aJaWlrr/yK/XmvbIzs5u8OeEE04w33jjDbO4uNiTpXc6rWmLDRs2mGFhYea7775r7tixw/zjH/9oxsbGmna73aO1dzataYuHH37YjI+PN5977jlz/vz55uDBgzWrq41xyKyu9vz93eGDj2nWTk8MCQkxExISzNjYWDMrK8s0TdPs3r27+cEHHzR5zjPPPGPabDYzLi7O7N69u7l7924PVtx5tbQtnnjiCRNo9EfaRmv+2zjYqaeequnsbaQ1bfHpp5+agwcPNoODg81+/fqZX331lQcr7rxa2hYVFRXmbbfdZqakpJiBgYHmqaeeam7ZssXDVXduhwaf9vz93Wk2KdVu776jNW0h7Uft4TvUFr5DbdGx/Zrf350m+IiIiIgcTYcf3CwiIiLSXAo+IiIi4jcUfERERMRvKPiIiIiI31DwEREREb+h4CPSgc2fPx/DMBr9+e9//9us85csWUKPHj3at0jgmmuucdcWGRnJRRdd1GAl3F977fvvv99j57VU/X1bLBa6du3KjBkztNGoiBcp+Ih0cP3796e4uLjBn9NOO83bZTUyefJkiouL+fHHH3G5XEyePLlNrvvss882uVP20ULd4c5rD8uWLaOgoID58+fzwgsv8OKLLzbrvPnz5/tkW4p0ZB1+k1IRf2e1WjvERolBQUHuPcDuvfdeTjnlFFwuFxbLr/v/X6GhoR49rzXCw8OJi4tjzJgxXHDBBaxYsYLrrrvOY58vIr9Qj49IJ/b+++/Tp08fwsLCGD16NPn5+c0679VXX6VHjx6EhYVx9tlnU1RU5P7ayy+/TEZGBnFxcdx9992temwTEBBATU0NLpcLgGeeeYYePXqQkpLC/fff737fNE3uuOMO4uLiiI6O5ne/+12jzzv0kdXu3bsxDIPRo0ezfft296Om3bt3H/E8gD59+vC///3P/fqOO+7g9ttvB8DpdPLHP/6R5ORkevTowdtvv93i+965cydffvkl6enpQO3O0pdccgkRERGkpKTw97//HYDvvvsOwzC49tprWbp0KYZhEBwc7L5OaWkp119/PbGxsfTt25elS5e2uBYRf6XgI9LBrVmzxt2TEhUVxZo1awDYt28fl112GX/605/YsmULMTExPPjgg0e9XllZGddeey2zZs1i3bp1BAQE8NhjjwHw5Zdf8tvf/pY5c+awZMkSXnnlFV577bUW1VtZWcmzzz7LKaecQkBAAO+99x4zZ85k/vz5fPrpp7z22ms89dRTAHzxxRe8+OKL/O9//+Orr77igw8+4D//+c8Rr5+YmEhxcTGffPIJaWlp7sd/iYmJR61t4sSJLFiwwP36888/Z+LEiQDMmjWL9957j4ULF/L0008zadIksrOzm3XPI0eOJDIykm7dujFkyBBuvvlmAGbOnElOTg5ZWVm8+eab/P73v2fnzp0MGzaM4uJinnnmGU4++WSKi4sbjImaOnUqWVlZfP/990ydOpUJEyZQVlbWrFpE/J2Cj0gHl5mZyapVq9x/MjMzgdrHK7m5uVx88cVs3ryZqqoqNm3adNTrWa1WbDYbDoeDhIQEPv74Y/76178C8NJLL3HhhRcyfvx4+vfvz5VXXsnHH3/crDqfe+45oqKiCAsL46effmLu3LkAzJ07l6lTp3LaaacxZMgQZs6cyT/+8Q8AQkJCcLlcOBwOjjnmGHJychg3btwRP8cwDKKioujSpQsWi8UdCA3DOGqNBwefvLw8CgsLGTlypPvep0+fTv/+/TnvvPM47rjjGoSkI3nrrbd46623AHjssccICQkB4J577mHx4sVUV1ezdetWrFar+++oqChCQ0MJCAggKiqKyMhIAFwuF6+99hozZ86kd+/e3HTTTYSEhLBs2bJm1SLi7xR8RDq4wMBAevTo4f4TGBgI1D4muuuuu0hJSeGuu+6iurqampqao14vJCSEd955h7lz5xIfH89ZZ53Ftm3bgNqNHT/88EN3mHjyySfJzc1tVp1XXHEFq1atoqioiOXLl9O7d28AduzY4X70A5Cens6OHTsAOPXUU7n77ru59tpriYuL46abbqK8vLxF35+WOP744ykvLyc3N5cFCxYwYcIE9xik/Px8/vCHP7jv/aeffmr2vaekpHDWWWcxePBg5s2b535/5cqVDB48mNGjR/Pf//6X0NDQo7bR3r17cTgcXHLJJe5aCgoKml2LiL9T8BHppF5//XWWLl1KXl4e33zzDeedd16zzisqKiI6Opqvv/6aPXv2kJCQwO9//3sAunbtyuTJk929S6tXr+all15q1nUjIiLo0aNHo4HY3bp1cwcrgK1bt9KtWzegdgfm8847j7Vr15KVlcV3333n7g06GovF0qrxRxdddBELFixo8JgLau/9hRdeaHDvt912W4uuffPNNzNv3jz3GKbrrruOqVOnsn37dl555RV3aD3SPcTHxxMUFMRnn33WoJaDaxWRw1PwEemk6sd87Nu3jwULFvDAAw80KwgUFhZyxhln8Pnnn2O327FYLO5f1JMmTeKjjz5i9+7dVFdXc88993DPPff8qjpvvPFG5syZw9KlS1m5ciX333+/e6r7okWLmDhxIitXrqSqqgrDMNy1HE16ejo7d+7kp59+YsuWLaxcubJZ51188cV8/PHHrFixgtGjR7vfv/rqq5k/fz5Op5OioiIuuugiPvjggxbd62WXXYbdbufzzz8HatuosrKSnJwcJk+ezJ49exq0Ue/evVmzZg1btmxh3bp1bNiwAYvFwpVXXsnzzz+PYRjk5uZy+umn8/3337eoFhF/peAj0klNmjSJjIwM+vbty8yZM7npppvYsGEDlZWVRzwvMzOTxx9/nJtvvpn09HQ2btzII488AtQO0r3//vu56qqrOO6446iqquLZZ5/9VXVedNFF3HfffUyaNIlzzjmHK664wt2Tcu211zJq1CjOPPNMBg4cSEZGhntg8NF07dqVRx55hDPPPJMhQ4bwzTffNOu8ESNGsHr1akaNGoXNZnO/f+eddzJgwABGjhzJWWedxfjx45tdS73Q0FAmTZrkHt/01FNP8dhjjzFixAhiY2Pp379/g4B20kkncd111zF06FBGjhzJhg0bAHjiiSewWq0MGTKESy+9lDvuuINzzz23RbWI+CvD1BKiIiIi4ifU4yMiIiJ+Q8FHRERE/IaCj4iIiPgNBR8RERHxGwo+IiIi4jcUfERERMRvKPiIiIiI31DwEREREb+h4CMiIiJ+Q8FHRERE/IaCj4iIiPiN/webfMdt+6GjQwAAAABJRU5ErkJggg==\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 绘制ROC曲线并计算AUC值\n",
"auc_nn = roc_auc_score(y_test, y_pred_nn)\n",
"print(f\"神经网络的AUC值为 {auc_nn}\")\n",
"fpr_nn, tpr_nn, thresholds = roc_curve(y_test, y_pred_nn)\n",
"plt.plot(fpr_nn, tpr_nn, label=\"神经网络: \"+str(round(auc_nn, 3)))\n",
"plt.plot(fpr_dt, tpr_dt, label=\"决策树: \"+str(round(auc_dt, 3)))\n",
"#plt.plot(fpr_lr, tpr_lr, label=\"对数几率模型: \"+str(round(auc_lr, 3)))\n",
"plt.xlabel('False Positive Rate')\n",
"plt.ylabel('True Positive Rate')\n",
"plt.title('ROC')\n",
"plt.xlim([0,1])\n",
"plt.ylim([0,1.1])\n",
"plt.grid()\n",
"plt.legend(loc='lower right')\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"id": "f679be76",
"metadata": {},
"source": [
"支持向量机"
]
},
{
"cell_type": "code",
"execution_count": 117,
"id": "bea744ba",
"metadata": {},
"outputs": [
{
"data": {
"text/html": [
"<style>#sk-container-id-9 {color: black;background-color: white;}#sk-container-id-9 pre{padding: 0;}#sk-container-id-9 div.sk-toggleable {background-color: white;}#sk-container-id-9 label.sk-toggleable__label {cursor: pointer;display: block;width: 100%;margin-bottom: 0;padding: 0.3em;box-sizing: border-box;text-align: center;}#sk-container-id-9 label.sk-toggleable__label-arrow:before {content: \"▸\";float: left;margin-right: 0.25em;color: #696969;}#sk-container-id-9 label.sk-toggleable__label-arrow:hover:before {color: black;}#sk-container-id-9 div.sk-estimator:hover label.sk-toggleable__label-arrow:before {color: black;}#sk-container-id-9 div.sk-toggleable__content {max-height: 0;max-width: 0;overflow: hidden;text-align: left;background-color: #f0f8ff;}#sk-container-id-9 div.sk-toggleable__content pre {margin: 0.2em;color: black;border-radius: 0.25em;background-color: #f0f8ff;}#sk-container-id-9 input.sk-toggleable__control:checked~div.sk-toggleable__content {max-height: 200px;max-width: 100%;overflow: auto;}#sk-container-id-9 input.sk-toggleable__control:checked~label.sk-toggleable__label-arrow:before {content: \"▾\";}#sk-container-id-9 div.sk-estimator input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-9 div.sk-label input.sk-toggleable__control:checked~label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-9 input.sk-hidden--visually {border: 0;clip: rect(1px 1px 1px 1px);clip: rect(1px, 1px, 1px, 1px);height: 1px;margin: -1px;overflow: hidden;padding: 0;position: absolute;width: 1px;}#sk-container-id-9 div.sk-estimator {font-family: monospace;background-color: #f0f8ff;border: 1px dotted black;border-radius: 0.25em;box-sizing: border-box;margin-bottom: 0.5em;}#sk-container-id-9 div.sk-estimator:hover {background-color: #d4ebff;}#sk-container-id-9 div.sk-parallel-item::after {content: \"\";width: 100%;border-bottom: 1px solid gray;flex-grow: 1;}#sk-container-id-9 div.sk-label:hover label.sk-toggleable__label {background-color: #d4ebff;}#sk-container-id-9 div.sk-serial::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: 0;}#sk-container-id-9 div.sk-serial {display: flex;flex-direction: column;align-items: center;background-color: white;padding-right: 0.2em;padding-left: 0.2em;position: relative;}#sk-container-id-9 div.sk-item {position: relative;z-index: 1;}#sk-container-id-9 div.sk-parallel {display: flex;align-items: stretch;justify-content: center;background-color: white;position: relative;}#sk-container-id-9 div.sk-item::before, #sk-container-id-9 div.sk-parallel-item::before {content: \"\";position: absolute;border-left: 1px solid gray;box-sizing: border-box;top: 0;bottom: 0;left: 50%;z-index: -1;}#sk-container-id-9 div.sk-parallel-item {display: flex;flex-direction: column;z-index: 1;position: relative;background-color: white;}#sk-container-id-9 div.sk-parallel-item:first-child::after {align-self: flex-end;width: 50%;}#sk-container-id-9 div.sk-parallel-item:last-child::after {align-self: flex-start;width: 50%;}#sk-container-id-9 div.sk-parallel-item:only-child::after {width: 0;}#sk-container-id-9 div.sk-dashed-wrapped {border: 1px dashed gray;margin: 0 0.4em 0.5em 0.4em;box-sizing: border-box;padding-bottom: 0.4em;background-color: white;}#sk-container-id-9 div.sk-label label {font-family: monospace;font-weight: bold;display: inline-block;line-height: 1.2em;}#sk-container-id-9 div.sk-label-container {text-align: center;}#sk-container-id-9 div.sk-container {/* jupyter's `normalize.less` sets `[hidden] { display: none; }` but bootstrap.min.css set `[hidden] { display: none !important; }` so we also need the `!important` here to be able to override the default hidden behavior on the sphinx rendered scikit-learn.org. See: https://github.com/scikit-learn/scikit-learn/issues/21755 */display: inline-block !important;position: relative;}#sk-container-id-9 div.sk-text-repr-fallback {display: none;}</style><div id=\"sk-container-id-9\" class=\"sk-top-container\"><div class=\"sk-text-repr-fallback\"><pre>SVC(C=100, gamma=1)</pre><b>In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook. <br />On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.</b></div><div class=\"sk-container\" hidden><div class=\"sk-item\"><div class=\"sk-estimator sk-toggleable\"><input class=\"sk-toggleable__control sk-hidden--visually\" id=\"sk-estimator-id-9\" type=\"checkbox\" checked><label for=\"sk-estimator-id-9\" class=\"sk-toggleable__label sk-toggleable__label-arrow\">SVC</label><div class=\"sk-toggleable__content\"><pre>SVC(C=100, gamma=1)</pre></div></div></div></div></div>"
],
"text/plain": [
"SVC(C=100, gamma=1)"
]
},
"execution_count": 117,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"from sklearn import svm\n",
"params_svm = {'kernel':['rbf','linear'], 'gamma':[10,1,0.1,1e-2], 'C':[1,100,1e4]}\n",
"# 支持向量机训练模型\n",
"base_line_model = svm.SVC() # 默认 kernel='rbf'\n",
"svc = GridSearchCV(estimator=base_line_model, param_grid=params_svm, cv=5, n_jobs=3)\n",
"svc.fit(x_train, y_train)\n",
"y_pred_svm = svc.predict(x_test)\n",
"svc.best_estimator_"
]
},
{
"cell_type": "code",
"execution_count": 118,
"id": "f448f688",
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"支持向量机模型在 训练集 上的性能 -- \n",
"Support Vector Machinen | 准确率: 0.8411\n",
"Support Vector Machinen | 均方误差: 0.1589\n",
"Support Vector Machinen | R2-score: 0.3269\n",
"Support Vector Machinen | 混淆矩阵:\n",
" [[348 37]\n",
" [ 62 176]]\n",
"\n",
"\n",
"\n",
"支持向量机模型在 测试集 上的性能 -- \n",
"Support Vector Machine | 准确率: 0.8507\n",
"Support Vector Machine | 均方误差: 0.1493\n",
"Support Vector Machine | R2-score: 0.3715\n",
"Support Vector Machine | 混淆矩阵:\n",
" [[151 13]\n",
" [ 27 77]]\n"
]
}
],
"source": [
"# 模型性能评估\n",
"print(\"支持向量机模型在 训练集 上的性能 -- \")\n",
"model_performance_evaluation('Support Vector Machinen', y_train, svc.predict(x_train))\n",
"print(\"\\n\"*2)\n",
"print(\"支持向量机模型在 测试集 上的性能 -- \")\n",
"model_performance_evaluation('Support Vector Machine', y_test, y_pred_svm)"
]
},
{
"cell_type": "code",
"execution_count": 119,
"id": "b72ca3dc",
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"该支持向量机模型的AUC值为 0.8305581613508443\n"
]
},
{
"data": {
"image/png": "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5uSTT8ZqteJyufb6PK+oqIizzjqLO+64gyOOOIKqqiqqqqpavbY6bx4AAxsMiB3Q6u8vIiItU19f3+TxR2hoaJM7A3vrw9nQ0BDY5vV6qa2txTRNHA4Hdrsd0zSpra0NBJ1f+u9//8uUKVOaFXp21+X1emloaGjy5fV6CQ0N3edxkZGRgdcnn3wyUVFRJCQkEBoayowZM5p1/gOpqKjgvPPOIyoqirPOOovy8vJmHffpp5+SmppKWFgYRx99NCtXrgx8b+nSpQwYMIBp06YxdOhQHn300UbH1tXVMWbMGJYuXdoq19Aa2j342Gw25s6dy9SpU0lOTuatt94KDE0fPXo0//nPf5oc8+qrr1JcXMyf/vQnIiMjA1+taUeVmwZbCQADI/uCpX3nFRARkaYuuugiYmNjSUhICHy98sorTJ8+vdG2uLg4br75ZgBKSkpYuXIlW7ZsoaqqipUrV/LDDz9w+OGHM2rUKD799FPuueceRo4cyejRoykoKAic76qrrsLhcNCjRw/eeustnnjiCUJCQpp8Wa3WJn1JvV4vN954I4888kiTrzvvvLNJgKuvr8fn82G1WjEMIxCQQkJCeP755yktLeXaa69ttceTU6dOZcuWLfz0008cdthhTJ8+/YDHVFZWctVVV/Hss8+SnZ3NxIkTOffccwPXe80117Bw4UJWrFjBp59+yl133UVdXR3g759z0UUXsXz58lapv7W0+6MugMmTJ5OVlcXy5csZN24ciYmJgP+x195Mnz69WQ30a/y8ZTNeawMW02RgopaqEBHpCN59990m26ZOncrYsWO56qqr9npMXl4eb775Jhs2bKCgoIDXXnuNqVOnkpmZCcDFF1/MaaedttfjQ0NDufvuu7n55puJiora56PBq666qkkgufTSS8nPzyc/P3+vx/zf//1fo9cXXnghP/30E0VFRXz//ffcfffdPP7441it1kbnbY0J/nbs2MHrr7/Ot99+S2pqKvfeey8DBw6kurp6v32YNmzYQN++fTnxxBMB/2f/t7/9jbq6Ourq6rjjjjs45ZRTADjkkEOor6+npqaGkJCQwF2gfv36/er6W1NQgg9A79696d27d7BO38TPW9cD0LehAYdmbBaRLs40TWo97T8rcajd2uIh4j6fD8Mwmn3cmDFjGDNmDPPnz2fRokX8/e9/55RTTgn0rykqKmLJ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nJ07d+73uM6qWwefFdvWAzDA04AlSSO6REQ6ktTUVMrLy9m0aRMzZsxg0KBB9OnTB7vdzrhx4xg7dix2u53jjjuOUaNGNVrW4uabb+aWW25h4MCB3Hbbbdx7772B7y1atIhLLrmEv/zlL03W6gJ/+Jk5cyabN29m2bJljBs3jiOPPJLKykqWLl3K4Ycf3mj/jIwMXn31VW655RaeeuopNm7cyDXXXMO0adOIi4vjlVde4bnnnsPn8/G73/3uV30mPp+PZ599lr/+9a8ccsghXHfddbhcLrKzs/d7XGlpKZWVlVxwwQX07NmTqVOn4na72bZtG3l5eZxyyincf//9JCcnc/PNN1NbW0tmZuZ+j+usuvWSFTmlGQAM1OKkItLdmCZ4gtD3xB7W4hnyPR4Pc+bM4a677gKarqi+2+7FQJcsWcLzzz/P8uXLeeihh6iurmbVqlX4fD4ee+wxXnnlFd58801uuOEGLr30Uv70pz81Wh+tX79+3Hbbbdx4442sWLGCd955h59//pm77rqLrKwsJk2axL///e/A/rvv9Bx33HEUFhaycuVK3nvvPaZOncqGDRs48cQTcTgcfPPNN3u923PiiScyefJkpk+ffsDPoqCggPLyck466aTAtqOOOooVK1YwePDgfR4XHx+P1Wrl5Zdf5rzzzuO5556jX79+pKSkYLPZGvVXysrKAvyPBvd3XGfVrYPPjqpMsEFf0wkh0cEuR0Sk/Xhq4IEgDOq4ays4wlt0yKOPPkp5eTkXXXQR4A84ffr0wTRNysvLSUhIwOPxMHy4f0qS448/nu+//56kpCROPPFEXnnlFb766ivuuOMORo4cydKlS4mOjmbMmDGcffbZfPrpp3z77beNAtW1117LggULOP300wkLC2P27NkMGTKEK664osn6YU899RTR0dH8/e9/JyYmhn79+nHTTTdRUFDAU089RWhoKPX19bz11ltce+21TRbL/uijj5q9MK3L5SIsLIykpKTAtqioKLZs2bLf4wzD4B//+AeXXHJJ4Bo+//zzvS7++re//Y3zzz8/cI7mHtdZdOtHXVW+rQD0CdGILhGRjuibb77h3nvvJSIigjPPPBOv14tpmhQWFpKTk0NSUhKlpaW8//77gWNsNhtjxozhjjvu4LrrrmPChAmkpqZyyy238NZbbxEd7f8P3aSkJD766CPuv//+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5RRCQkJITk7mX//6V5Pj09PTiYmJIT8/v1WuobPpdhMYZuT/APhHdBkJg4NcjYiI7EtUVBQPPvggl112GV999RXR0dGkpaURGhpKXV0dVquVp59+GrfbzZlnnhkIAO+++y5PP/00K1asoKamhosuuoiMjAxWrFjBtGnT2LhxI/Pnz+err77irbfeCpyvocH/NMAwDKxWKwsXLuSZZ57BZrOxfv166urqsFgsOBwOLBYLDQ0N2GwH/2f02Wef5dlnn+WDDz6gvLyciy++mFWrVuFwOPZ73P/93/9x/vnn88Ybb/DNN99w2WWXcdRRRzFo0CCmTJlC//792bRpE1999RWXXnopEyZMIDXVvyalaZpcf/313H777fTr1++ga+/UzG6goqLCBMzS0lJz6ovXmCPnjzRnPD0q2GV1S/X19eZ7771n1tfXB7sUMdUeHUlbtkVtba2ZkZFh1tbWBrb5fD6zur663b98Pl+L658+fbo5ZcqURtumTp1q/vWvfzVN0zQffvhh8/LLL2/0/dLSUtPr9Zo+n89cunSpaZqmeeGFF5qLFi0KfD8/P9/0er2m2+02TdM0n332WbNXr16mYRhmcnKy+frrr5umaZpFRUXmgAEDzGuuucbs27evmZycbIaFhZmHH354i69lT4cccoj54IMPBl5PnjzZXLx48QGPCw8PN6urqwOvBw0aZH766afmzp07zSuuuMJsaGgIfK9fv37mwoULA6+feeYZc/DgwWZdXd2vqr017e3nc7fS0lITMCsqKlrtfN3ujk+ZOw8c0MueFOxSRESCprahlqMXtn8/xx8u/YEw+74fUe3Nww8/3KQzcn19PSEh/5uOxGJp3HPjmGOOoba2NrCCOkBxcTFLly4lNDQ0sM3n83H00Ufz5ptvct1113HuueeSlJTEf//7X+rr67nvvvv4zW9+w+jRo5k3bx4A7733Hq+99hqvvfZao3NeddVVxMTEMGfOnANek2marF27lrlz5wa2HXXUUaxYsYKTTz55v8eOHDmSxx9/nJtuuolFixaxY8cOxowZQ3R0NAsWLAjsV1FRwfbt2xk8eHDg+mfOnMmUKVN44403OPnkk+nZs+cBa+1qul3w2UE5AP2iNXGhiEhn4Ha72blzJ0lJSVitViwWC5WVlY36+BiGgcfjwWazYRgGGzdubPI+kydPZurUqftd3PPjjz8G4F//+hePPPIIf/zjH/nmm284+eSTefTRRxk5cuQ+j3366acxDKNZ11RVVYXP52PgwIGBbVFRUXut+5cee+wxjj/+eO666y4Mw+D1118nNja2yX6PPPIIo0ePDiyg+uc//5mGhgbsdjs//PADt9xyC++88w7HH398s2ruKrpV8Klyuym1ewAY0a/pSroiIt1FqC2UHy79ISjnbamXXnqJBQsWkJKSwrvvvktoaCgVFRW899573HPPPYFRW6+//jrp6ekMGjQIgJiYGJKTk7Hb7YC/U/CqVauIiIgAYOfOnZx00kmN7pLMmzcPi8VCbm4uDz/8MM899xwjRozg/vvvp6ysjJkzZ3LPPffstc79dbb+pd19g/bsJB0SEkJNTc1+jzN39dF58MEHmTZtGj/99BOXXXYZAwcO5Mgjjwzst3r1ah599FE+//xzwB8e58+fzz/+8Q+mTp0KQM+ePbnjjjv49ttvm113V9CtRnX9XJiN14BQn4/Bg7pXwhUR2ZNhGITZw9r9q7l3RHZzu908+OCD3Hzzzbz88stUV1eTmZkZGNW1fPlyysrK2LlzJ7W1tYHQA/5Q8emnn5Kens7ChQtpaGjg4YcfJj09nfT0dO6///5GYWXRokWUlJQwePBg7r77blwuFytXriQiIoKHH36YSZMmYbFYWLJkya/+/ENDQwkNDaWkpCSwrbKy8oAdm9esWcPWrVu5/fbbCQ8P58QTT+Siiy7i5ZdfDuxTXV3NJZdcwh133MExxxwD+KcFqKur44wzzgjsd/jhh5Obm/urr6Wz6VbBZ0PBjwD083ixxqUEuRoRETmQ2bNn06NHD377298Gtj3wwAOcfvrpXH311fz+97/H6/Xu9djdo7RycnI455xziI2NZfr06axevZoXX3yR++67r1FQWrFiBQ8++CCGYRAVFcWf//xn7r33Xj7++GOysrJ49dVXWbx4MSeddFKrXNuRRx7J999/H3i9atUqevfuvd9jGhoaqKiooK6uLrBt27Ztgc/ANE2uuuoq+vbt2+jOVEJCAiEhIdTW1ga2bd68mf79+7fKtXQm3epRV2HZWnBCT58TLNYDHyAiIkGzevVqHnjggUbz+LzzzjvMnz+fn3/+maioKI444giuvPJKnnvuuUadlgHefvttVq1axXXXXcdf/vIXFi1axCGHHMKZZ57JSSedxBNP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MdF88cUXTdM0zeuvv94888wzTdM0zYqKCrO+vr7JMSUlJWZISIj5xRdfmB6Px5w0aZJ54403tmvdXdHBtMX27dvNpKQk869//atZWVkZ+JJf72DaIzc3t9HX0Ucfbb766qtmeXl5e5be5RxMW6xfv94MDw8333rrLbOgoMC8/fbbzfj4eNPlcrVr7V3NwbTFgw8+aCYmJprPPPOMOX/+fPPQQw/VqK5Wxi9GdbXl3+9OH3xM0z88MTQ01ExKSjLj4+PN9PR00zRNs3///ua7776712Oeeuop0263mwkJCWb//v3N7du3t2PFXVdL2+If//iHCTT5ktZxMP829nTCCSdoOHsrOZi2+Oijj8xDDz3UDAkJMUeMGGF+/fXX7Vhx19XStqitrTX/8Ic/mL169TIdDod5wgknmNnZ2e1cddf2y+DTln+/u8wipVrtveM4mLaQtqP26DjUFh2H2qJz+zV/v7tM8BERERE5kE7fuVlERESkuRR8REREpNtQ8BEREZFuQ8FHREREug0FHxEREek2FHxEOrH58+djGEaTr88++6xZxy9dupQBAwa0bZHAVVddFagtOjqa8847r9FMuL/2ve+77752O66ldl+3xWKhT58+zJw5UwuNigSRgo9IJzdy5EjKy8sbfZ144onBLquJqVOnUl5ezk8//YTP52Pq1Kmt8r5PP/30XlfKPlCo29dxbeHLL7+kuLiY+fPn8/zzz/PCCy8067j58+d3yLYU6cw6/SKlIt2d1WrtFAslOp3OwBpg99xzD8cddxw+nw+L5df991dYWFi7HncwIiMjSUhI4OSTT+acc85hxYoVXHPNNe12fhH5H93xEenC3nnnHYYOHUp4eDgTJkxgy5YtzTru5ZdfZsCAAYSHh3P66adTVlYW+N6CBQsYMmQICQkJ3HXXXQf12MZms+H1evH5fAA89dRTDBgwgF69enHfffcFtpumya233kpCQgKxsbH88Y9/bHK+Xz6y2r59O4ZhMGHCBDZv3hx41LR9+/b9HgcwdOhQPv/888DrW2+9lZtuugkAj8fD7bffTs+ePRkwYABvvPFGi69769atfPXVV6SkpAD+laUvvPBCoqKi6NWrF//85z8B+P777zEMg6uvvpply5ZhGAYhISGB96msrOTaa68lPj6e4cOHs2zZshbXItJdKfiIdHJr164N3EmJiYlh7dq1AOzYsYNLLrmEP/3pT2RnZxMXF8df//rXA75fVVUVV199NbNnzyYjIwObzcYjjzwCwFdffcX//d//MWfOHJYuXcpLL73EK6+80qJ66+rqePrppznuuOOw2Wy8/fbbzJo1i/nz5/PRRx/xyiuv8MQTTwDw6aef8sILL/D555/z9ddf8+677/Lf//53v++fnJxMeXk5H374IX379g08/ktOTj5gbeeffz6ffPJJ4PWiRYs4//zzAZg9ezZvv/02ixcv5sknn2TKlCnk5uY265qPP/54oqOj6devH4cffji///3vAZg1axZ5eXmkp6fz2muvcfPNN7N161bGjBlDeXk5Tz31FMceeyzl5eWN+kRNnz6d9PR0fvjhB6ZPn87kyZOpqqpqVi0i3Z2Cj0gnl5qayqpVqwJfqampgP/xSn5+PhdccAFZWVnU19ezcePGA76f1WrFbrfjdrtJSkrigw8+4G9/+xsAL774Iueeey6TJk1i5MiRXH755XzwwQfNqvOZZ54hJiaG8PBwfv75Z+bOnQvA3LlzmT59OieeeCKHH344s2bN4l//+hcAoaGh+Hw+3G43w4YNIy8vj1NOOWW/5zEMg5iYGCIiIrBYLIFAaBjGAWvcM/gUFhZSWlrK8ccfH7j2GTNmMHLkSM466ywOO+ywRiFpf15//XVef/11AB555BFCQ0MBuPvuu1myZAkNDQ3k5ORgtVoD/xsTE0NYWBg2m42YmBiio6MB8Pl8vPLKK8yaNYvBgwdz/fXXExoaypdfftmsWkS6OwUfkU7O4XAwYMCAwJfD4QD8j4nuvPNOevXqxZ133klDQwNer/eA7xcaGsqbb77J3LlzSUxM5LTTTmPTpk2Af2HH9957LxAmHn/8cfLz85tV52WXXcaqVasoKytj+fLlDB48GICCgoLAox+AlJQUCgoKADjhhBO46667uPrqq0lISOD666+npqamRZ9PSxx55JHU1NSQn5/PJ598wuTJkwN9kLZs2cJtt90WuPaff/652dfeq1cvTjvtNA499FDmzZsX2L5y5UoOPfRQJkyYwGeffUZYWNgB26ikpAS3282FF14YqKW4uLjZtYh0dwo+Il3UwoULWbZsGYWFhXz77becddZZzTqurKyM2NhYvvnmG4qKikhKSuLmm28GoE+fPkydOjVwd2n16tW8+OKLzXrfqKgoBgwY0KQjdr9+/QLBCiAnJ4d+/foB/hWYzzrrLNatW0d6ejrff/994G7QgVgsloPqf3TeeefxySefNHrMBf5rf/755xtd+x/+8IcWvffvf/975s2bF+jDdM011zB9+nQ2b97MSy+9FAit+7uGxMREnE4nH3/8caNa9qxVRPZNwUeki9rd52PHjh188skn3H///c0KAqWlpfzmN79h0aJFuFwuLBZL4A/1lClTeP/999m+fTsNDQ3cfffd3H333b+qzuuuu445c+awbNkyVq5cyX333RcY6v7FF19w/vnns3LlSurr6zEMI1DLgaSkpLB161Z+/vlnsrOzWblyZbOOu+CCC/jggw9YsWIFEyZMCGy/8sormT9/Ph6Ph7KyMs477zzefffdFl3rJZdcgsvlYtGiRYC/jerq6sjLy2Pq1KkUFRU1aqPBgwezdu1asrOzycjIYP369VgsFi6//HKee+45DMMgPz+fk046iR9++KFFtYh0Vwo+Il3UlClTGDJkCMOHD2fWrFlcf/31rF+/nrq6uv0el5qayqOPPsrvf/97UlJS2LBhAw899BDg76R73333ccUVV3DYYYdRX1/P008//avqPO+887j33nuZMmUKZ5xxBpdddlngTsrVV1/N+PHjOfXUUxk9ejRDhgwJdAw+kD59+vDQQw9x6qmncvjhh/Ptt98267ixY8eyevVqxo8fj91uD2y/4447GDVqFMcffzynnXYakyZNanYtu4WFhTFlypRA/6YnnniCRx55hLFjxxIfH8/IkSMbBbRx48ZxzTXXcMQRR3D88cezfv16AP7xj39gtVo5/PDDufjii7n11ls588wzW1SLSHdlmJpCVERERLoJ3fERERGRbkPBR0RERLoNBR8RERHpNhR8REREpNtQ8BEREZFuQ8FHREREug0FHxEREek2FHxERESk21DwERERkW5DwUdERES6DQUfERER6Tb+H5Pl8gOBgUGZAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 640x480 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# 绘制ROC曲线并计算AUC值\n",
"auc_svm = roc_auc_score(y_test, y_pred_svm)\n",
"print(f\"该支持向量机模型的AUC值为 {auc_svm}\")\n",
"fpr_svm, tpr_svm, thresholds = roc_curve(y_test, y_pred_svm)\n",
"plt.plot(fpr_svm, tpr_svm, label=\"支持向量机: \"+str(round(auc_svm, 3)))\n",
"plt.plot(fpr_nn, tpr_nn, label=\"神经网络: \"+str(round(auc_nn, 3)))\n",
"plt.plot(fpr_dt, tpr_dt, label=\"决策树: \"+str(round(auc_dt, 3)))\n",
"#plt.plot(fpr_lr, tpr_lr, label=\"对数几率模型: \"+str(round(auc_lr, 3)))\n",
"plt.xlabel('False Positive Rate')\n",
"plt.ylabel('True Positive Rate')\n",
"plt.title('ROC')\n",
"plt.xlim([0,1])\n",
"plt.ylim([0,1.1])\n",
"plt.grid()\n",
"plt.legend(loc='lower right')\n",
"plt.show()"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3 (ipykernel)",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.10.9"
}
},
"nbformat": 4,
"nbformat_minor": 5
}