Commit f03df26e by 20200116038

homework

parent d27db9cd
File added
This source diff could not be displayed because it is too large. You can view the blob instead.
<meta HTTP-EQUIV="REFRESH" content="0; url=http://www.cs.toronto.edu/~kriz/cifar.html">
This source diff could not be displayed because it is too large. You can view the blob instead.
knn_image_classify/img0.png

2.56 KB

knn_image_classify/img2.png

2.44 KB

knn_image_classify/img3.png

2.51 KB

knn_image_classify/img4.png

2.47 KB

knn_image_classify/img5.png

2.42 KB

knn_image_classify/img6.png

2.25 KB

knn_image_classify/img7.png

1.89 KB

knn_image_classify/img8.png

2.43 KB

knn_image_classify/img9.png

2.38 KB

File added
{
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# logistic回归\n",
"本次作业主要来练习使用逻辑回归对文本数据进行分类。通过完成作业,你将会学到: 1、如何调用逻辑回归进行分类; 2、如何对文本数据进行分类;3、如何评估模型效果。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```不要单独创建一个文件,所有的都在这里面编写(在TODO后编写),不要试图改已经有的函数名字 (但可以根据需求自己定义新的函数)```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。以胃癌病情分析为例,选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群必定具有不同的体征与生活方式等。因此因变量就为是否胃癌,值为“是”或“否”,自变量就可以包括很多了,如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是分类的。然后通过logistic回归分析,可以得到自变量的权重,从而可以大致了解到底哪些因素是胃癌的危险因素。同时根据该权值可以根据危险因素预测一个人患癌症的可能性。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在本次项目中,你将会用到以下几个工具:\n",
"- ```sklearn```。具体安装请见:http://scikit-learn.org/stable/install.html sklearn包含了各类机器学习算法和数据处理工具,包括本项目需要使用的词袋模型,均可以在sklearn工具包中找得到。 \n",
"- ```pandas```,数据处理库:https://pandas.pydata.org/pandas-docs/stable/\n",
"- ```matplotlib```,绘图库,绘制各种图表,本次作业中将进行各种模型评价指标的可视化展示:www.matplotlib.org"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. 文件读取\n",
"将文本数据读入,并探查数据的情况"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<bound method NDFrame.head of 0 1\n",
"0 ham Go until jurong point crazy.. Available only i...\n",
"1 ham Ok lar... Joking wif u oni...\n",
"2 spam Free entry in 2 a wkly comp to win FA Cup fina...\n",
"3 ham U dun say so early hor... U c already then say...\n",
"4 ham Nah I don't think he goes to usf he lives arou...\n",
"... ... ...\n",
"5567 spam This is the 2nd time we have tried 2 contact u...\n",
"5568 ham Will ü b going to esplanade fr home?\n",
"5569 ham Pity * was in mood for that. So...any other su...\n",
"5570 ham The guy did some bitching but I acted like i'd...\n",
"5571 ham Rofl. Its true to its name\n",
"\n",
"[5572 rows x 2 columns]>\n",
"垃圾邮件个数:747\n",
"正常邮件个数:4825\n"
]
}
],
"source": [
"#导入其他需要的算法库\n",
"import pandas as pd\n",
"#读取垃圾邮件数据,并统计垃圾邮件和正常邮件的数量\n",
"## TODO: 利用pandas库pd中read_csv()函数写出读取垃圾邮件数据csv文件的代码\n",
"smsDir = './SMSSpamCollection.csv' \n",
"df = pd.read_csv(smsDir,names = [0,1])\n",
"\n",
"#数据探查\n",
"print(df.head)\n",
"print(\"垃圾邮件个数:%s\" % df[df[0]=='spam'][0].count())\n",
"print(\"正常邮件个数:%s\" % df[df[0]=='ham'][0].count())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. 准备训练数据\n",
"将数据分为训练数据、测试数据、训练标签、测试标签,并将文本转化数值特征。\n",
"本次使用的数据是对垃圾邮件分类:数据有两列,第一列是标签(ham为非垃圾邮件、spam为垃圾邮件),待分类的邮件为英文文本。"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(3900,)\n",
"(1672,)\n",
"(3900,)\n",
"(1672,)\n"
]
}
],
"source": [
"#导入sklearn算法库中训练测试数据分割算法train_test_split,以及计算准确率等的算法cross_val_score\n",
"from sklearn.model_selection import train_test_split,cross_val_score\n",
"\n",
"# 对原始csv中的数据进行类型转换\n",
"X = df[1].values.astype('U')\n",
"y = df[0].values.astype('U')\n",
"## TODO: 利用train_test_split()函数对数据进行拆分,分出训练数据和测试数据\n",
"X_train_raw,X_test_raw,y_train,y_test = train_test_split(X, y,test_size=0.3)\n",
"print(X_train_raw.shape)\n",
"print(X_test_raw.shape)\n",
"print(y_train.shape)\n",
"print(y_test.shape) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"TF-IDF(term frequency–inverse document frequency)是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜寻结果中出现的顺序。详细资料可参考百度百科:https://baike.baidu.com/item/tf-idf/8816134?fr=aladdin"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(3900, 7236)\n",
"(1672, 7236)\n"
]
}
],
"source": [
"#导入sklearn算法库中文本特征提取的TFIDF算法\n",
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"\n",
"# 文本是无法直接用模型进行计算的,需要对文本数值化\n",
"## TODO: 利用sklearn.feature_extraction.text的TfidfVectorizer模块对文本进行TFIDF特征转换\n",
"vectorizer = TfidfVectorizer()\n",
"X_train = vectorizer.fit_transform(X_train_raw)\n",
"X_test = vectorizer.transform(X_test_raw) #为什么要用transform而不用fit_trainsform?\n",
"# arr1 = X_train.toarray() #\n",
"# arr2 = X_test.toarray()\n",
"print(X_train.shape)\n",
"print(X_test.shape)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. 训练模型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。\n",
"logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对X_train、y_train进行训练,对X_test、y_test进行测试。"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0.38526741 0.08232807 0.09233934 ... -0.01256525 -0.02803296\n",
" -0.01044055]]\n",
"预测为 ham ,信件为 Only once then after ill obey all yours.\n",
"预测为 ham ,信件为 What???? Hello wats talks email address?\n",
"预测为 ham ,信件为 Got but got 2 colours lor. One colour is quite light n e other is darker lor. Actually i'm done she's styling my hair now.\n",
"预测为 ham ,信件为 Say this slowly.? GODI LOVE YOU &amp; I NEED YOUCLEAN MY HEART WITH YOUR BLOOD.Send this to Ten special people &amp; u c miracle tomorrow do itplspls do it...\n",
"预测为 ham ,信件为 If u dun drive then how i go 2 sch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
" FutureWarning)\n"
]
}
],
"source": [
"#导入sklearn算法库logistic回归的算法\n",
"from sklearn.linear_model.logistic import LogisticRegression\n",
"\n",
"LR = LogisticRegression()\n",
"## TODO:写出LogisticRegression函数训练的代码,使用LR.fit()函数,第一个参数是训练的特征数据,第二个参数是训练的标签数据\n",
"LR.fit(X_train,y_train)\n",
"print(LR.coef_)\n",
"train_score = LR.score(X_train,y_train) #采用sklearn的score函数打印准确率得分\n",
"# ## TODO:写出LogisticRegression函数预测的代码,使用LR.predict()函数,参数是待遇测的特征数据\n",
"predictions = LR.predict(X_test)\n",
"#打印出预测的结果\n",
"for i,prediction in enumerate(predictions[:5]):\n",
" print(\"预测为 %s ,信件为 %s\" % (prediction,X_test_raw[i]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. 评估模型\n",
"训练完模型,需要利用二分类分类指标,以及ROC曲线衡量模型性能。"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [],
"source": [
"#导入绘图需要的matplotlib库\n",
"import matplotlib\n",
"matplotlib.rcParams['font.sans-serif']=[u'simHei']\n",
"matplotlib.rcParams['axes.unicode_minus']=False"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.1 混淆矩阵"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1421 1]\n",
" [ 61 189]]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQsAAADvCAYAAADl9/FyAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAXCklEQVR4nO3de5QcZZnH8e9vQsIlRAwOhDsxGFS8BDBcogKBJXIRQdggrMgeZdl4OyrrugqCuqsuIqvoObCA4QRl0cNFFBBFiSgcAwYwEYVFRNQFBbwQAgmgApl59o+3mnSa7umqoSvVNfP7nFMn3W9Xqt6ZTJ553ku9ryICM7NuBqqugJnVg4OFmeXiYGFmuThYmFkuDhZmlouDRR+RtF2Bc2dL2jl7PSjpDEk7Ze/nSfq2pMlN50+VdKmkDZ9H/aZn95kw2mtYfW1QdQVsHV+U9FdgAfAAcHfL57sDUyPiKeAlwDmS3glcC/wv8D9ZMJgMHBoRTzb93QOBp7O/i6SpwG+B3zSdMxn4IHAz8DBwJ7ArsFtE3An8HfDiiBjq4ddsNeFg0UciYr6kfwVmAauAz7Wccg7wdHbupZIeAP4KbAvsDAwBpwP7AJdLOiciLsr+7nHAXpJ+S/p3/zfgyYiY3VoPSRsBfwDeCHwDeLmky4EXA/dIWgYImAIcEBEP9Op7YP3LwaJPSNoTmA+cERErJQXwt5bTIiJC0mbAzhFxk6SJwGeBpaRMYauI+BdJWwPTs2u/ihRM9gMWAvOy632+Q3XWZH8eAVwcEZdLuhv4IvAB4AUR8ePn/1WPXwftPzkeWZkvQVt+x1PXRcTBI50jaRpwRUTs01T2SuALETEv+zn5JrA5sCgiLmxXNtI9HCz6x3LgcOB6Sa8BNgM+3XLOYNbM2Am4RNINwPeAfYG9gV2AByS9NTt/Q0lfAb4NnAAMA0TEMwCStpT0s+zcTYE7I+LIpvvNAJZL2oCU5ZwCvDa7v4PF87Bi5RC3Xpevi2ri1r8ZHOnzrEl5EakZ2SgTcBYwMSt6H7A8Iv5d0rWSvg78c2tZRDze6T4OFn0i6wc4TdJZWfZwUEQsB5A0A1gVEY9kp/9U0quBgyLiSuAbkj4FBPCZpsveGRH3S3oDMIcUgGZIOhO4HvhzROya3eNA4PiWan0auImU4exPyko2T6drX+BPEfHmXn8vxodgKIZ7dbEh4Bjg6qaydwA3AAdl7+cCJ2evfwTM7lB2Q6ebeDSk/2yR/XkxgKRJwIeBOZIOaM4agDuyc+YDpwLXANtlx3tY29x4GPgJqdP0QeCHpD6JEUXEE8A9pCD0GlLA+STwtYiY40AxegEME7kOUka5rOlYsM61IlZHxKrGe0kvAt7Gun1ek0n/9gArgWkdyjpyZtFHJG0KXJM1QwYl3QTcCzwJfAT4I6l/AuDNwGGS7gT+gTQachRZByiwA3A5QETcDtwuaRfSD8TtEfGnrBmyrKkKi1vqcwjpt81C4BcRMZSy22c/nwgMe3SkuCB4Jv+3bUW7jugRnAGcEhHPNP17PQFsTOo43zR7366sIweL/vIhUkfT45J+FxGvz9qeZwMLI+LibKQC4EhSO/U3pFGSS4G3N0YmJK3T3yFpAHg7cDvw/awZ8ecuP4SbkIZS9wY+L2kNMEjqCzkQmEQKYt/twdc+7mRZQxn2A2ZmgWLX7GdhOfB64ArSaNstHco6crDoE5JmktqZu0jaHNhS0heALYFHgT9lp35Z0rmk4dGjm+ZNDADflNScWXys6RafIf0GORo4DzizTR0mkjrEAiAivpF9dDXwn9k5JwIviYiTW/++5RfAUEnBIiJ2bryWdGNEnCZpR+BaSfuQOsJvJTVBWss6crDoH9OB/4qIJyXtT+q0uh24DDgROF/Sg8A2pCzikkagyGwJHBwRD2TNjbOBnwNIOobUht0rIoYlnZSdv0vW1GkYIM2ruGCEem6YHaVqNxQ41vQ6s4iIuZ3Kso7ueaRM4uNZ07FdWUfy4jfFSFpEisLfiYjWoc1e3WMAmNgSDJ7P9QRsHREP9eJ6ZcuGAi8BtoyI3auuTxlmzZoU11074ojos7be7g/LC/ZZlMKjIQVIOgqYEBFzSEOQM8u4T0QM9ypQZNeLugSKTGMocHXVFSnTcM6jX7gZUsxcshEG0sjB60mjFdZDEbEaoHnkZawJorQ+i7I4WBTTOi49JlNkK18EPFOvWOFgUVBjXBrSuLSbcTZKYoh6ZU7+YS+mMS4NaVz6vuqqYnUWwHDkO/qFM4tirgKWSNoGOIQ0WclK0m4ocCxxZjGGZR1vc0kz3fZvno9vVkSalKVcR79wZlFQRDzK2hERs1Ebjv4JBHk4WJhVoJFZ1ImDhVkFAvFM1GvdY/dZjELregLWe2P9e1zHPgsHi9EZ0z/IfWKMf4/FUAzkOvqFmyFmFUgrZfVPIMij8mAxuPmEmL79xO4n9pEdtt2A2bM26qPpMiP71R2bVF2FwjZiE16gzWvzPQZ4nEdXRMQW3c9M+qmJkUflwWL69hO57brtq67GmHbQNrtWXYVx4fq44v6850aor5oYeVQeLMzGq2FnFmbWTSCejnr996tXbc3GCHdwmlluQ57ubWbdBGLImYWZ5THs0RAz6yZN93awMLMu/CCZmeUSQU+fDZE0TdKS7PUOkm6U9ENJC5VMlHSNpJslnZCd95yykThYmFVCDOc8ul4pbcp0EWn1eYB3Au+OiAOA7YFXAe8DlkfE64D5kqZ0KOvIwcKsAkGhzGJQ0rKmo/WJ3HU2ZYqIUyPi7uyzFwErWHfPmx8BszuUdeQ+C7OKFOjgXDHS9oWdNmXK9ri9KyIektS65800nrsPzrSRKuFgYVaBQKWuwSlpBvAh4MCsqLHnzSrSnjdPdCjryM0Qs4oMMZDrKKppY+kTmlagb7fnTaF9cJxZmFWg5KHTk4EdgLOzpsknSB2g10raB9gFuJXUBGkt68jBwqwCaUey3ib2jU2ZIuIjwEdaP5c0j5RJfDwihoD725R15GBhVpH1vVJWRDxEy5437co6cbAwq0CE/GyImeXjZfXMrKu0+I3XszCzrrxgr5nlEFC7p04dLMwqUPYMzjI4WJhVxAv2mllXaT0LZxZmloObIWbWVeqzcDPEzHLwxshm1lUg1gx76NTMcvAMTjPryqMhZpabOzjNrCvP4DSz3NxnYWZdpWX1HCzMrJvw0KmZ5eDFb8wsNzdDzKyrOvZZ1Gug12wMGQ7lOvKQNE3Skuz1REnXSLpZ0glFykZSWrCQtEjSUkmnlXUPs7pqzLPoRbDItiu8iLTRMcD7gOUR8TpgvqQpBco6KiVYSDoKmBARc4AZkmaWcR+z2gpYEwO5jhyGgGOA1dn7uazdOOhHwOwCZR2V1WfRXInFpO3R7i3pXma1U7DPYlDSsqb3CyNi4bPXilgNkO1rCinDeDB7vRKYVqCso7KCRWsldm/+UNICYAHADtu6j9XGpwLBYkVEjPhbv8UTwMbAKmDT7H3eso7K6rNoVIKsEuvcJyIWRsTsiJi9xYvqNTHFrBd62WfRxnJSNg8wC7ivQFlHZf1ab1TilqwS95R0H7PaivKGTi8CrpW0D7ALcCsp089T1lFZmcVVwPGSzgLeAnynpPuY1dYwynXkFRFzsz/vB+YBNwMHRsRQ3rKRrl9KZhERqyXNzSpyZkSsKuM+ZnUVUe6krIh4iLWDDIXKOimtdzEiHs1bCbPxRwwN12tOpIcizCpSYp9FKRwszCpQx2dDHCzMqhCp36JOHCzMKuL1LMysq8B9FmaWi1f3NrOchocdLMysiwg3Q8wsJzdDzCwXD52aWS5uhphZV4EcLMwsn5q1QhwszCoREB46NbM83Awxs1w8GmJmXfnZEDPLJwAHCzPLw80QM8vHwcLMupOHTs0shxo+dVqvtcjNxpLIeXQhaaqkayUtk/SlrGyRpKWSTms67zllRThYmFVGOY+ujge+lm2ePEXSh4EJETEHmCFppqSjWsuK1tbNELOq5O/gHJS0rOn9wohY2PT+EeCVkl4IbE/aFb2xwddi0r7Du7Upu7dIdR0szKqSP1isyLKGTm4C3gi8H7gbmETa9BhgJbA7MLlNWSEjNkMkDUiaPMJnbyl6QzPj2QfJ8hw5fAJ4V0R8Evgl8FZg4+yzTUn/z59oU1ZIt8xiOjBf0k+AqS2fidRW8n6mZqPRu3kWU4FXSboF2As4g9TMuAWYBdwDPNCmrJBuwWINMAR8DFgCTAP2BX5Kau/UbFqJWR/p3dDpZ4AvAzsCS4EvAEskbQMcAuxN+r/aWlZIx2AhaQPg08AUYGvgO8BM4KXAbcDNwGuK3tDMEvXoV21E3Aa8Yp1rS3OBecCZEbGqU1kR3TKLJcCBrNu+iZY/zayonHMoRn35iEdp6SJoV1ZEx2AREWskLQY2A7YAziZ1kGydHW8F/jzaG5uNbxpzT53uAPwsIj7X+oGkAVLTxMxGo2a5+Uh9FhsCHwX+JumANqcMsHbc1syKGq66AsWM1Ax5CjhE0gzgdODVwEmk2WKQhk43LL2GZmPRWFz8JiJ+CxwraT7wu4j4ZfnVMhv7ejUasr7knsUVEVdExC8lva5RljVVzGw0evTU6frSNbOQdC+wqmlu+unAfpKOBPYg9WuM2r13bcqhL9v3+VzCuhh45TZVV2F8uLPqCpQrz4Nk90XEvKb3T0qaAJxCenjFzEahbs2QPMEiJL2CNP/8V1nZ24CrI+Lh0mpmNtaNlQ5OSROB+aTp3i8H9iFNxtoDuJE0/9zMRiOo3dDpSB2cg6R55Gsi4gpSv8VbgGXAC0nPzpvZKCnyHf2iY7CIiD9ExAmkSVl7AhtJOgxQRHwUOEzSluuromZjTs1GQ/IMnQapr+IrpOdBGsnTIuDYcqplNg6MwWCxI+np09XAp0ir7ABcR+rLMLOC8jZB+qkZkmcG50ub30s6U9IJEXGhpA+UVzWzMa5moyHd1uCck/VTPCsivg0cl60k/KUyK2c2ptWsGdItsxgAJkj6OfAU6eGxIDVN3gHcUG71zMYujaGhU1gb11aS1q54DPgBcAewM/DV8qpmNoaNwT6LNwG/57lJUUTEu8usmNmY10eBII+OmUW2EtZk4PBGUcvnbfcTMbOcatZnMdKkrGHgMuC8RlHTnwLOlzRYbvXMxq66NUPyrmfxAtJeA1OA/UmrZn0JeFdJ9TKzPtMtWEwAJkXE7IiY0ziAuyLiJtLzI2Y2Gj1uhkg6V9KbsteLJC2VdFrT588pK6JbsLgZuLJN+QUAEXHSaG5qNu5FGjrNc+QhaR9gq4i4RtJRwITsF/sMSTPblRWt8ojBIiKGImJNm/JLit7IzFr0KLPIlpO4ALhP0hHAXNZuJrSYtMdpu7JCCu+kbGbPnyjUwTkoaVnTsaDlcv8I/AI4E9gTeC9rt+lYSdqjeHKbskLyrJRlZmXI3x+xomkN3HZ2AxZGxB8lfRV4LWn3QEgPfg4AT7QpK8SZhVkVejuD89fAjOz1bGA6a5sZs4D7gOVtygpxZmFWld7NoVgEXCjpWGAiqX/iW5K2IU152Du725KWskIcLMwq0qsHySLiceDoda4tzSUti3lmRKzqVFaEg4VZVUqcnRkRj7J29KNjWREOFmZV6LPnPvJwsDCrSD8995GHg4VZVRwszCwPZxZmlo+DhZl1029rVeThYGFWFQcLM8vDmYWZ5eNgYWa5OFiYWVfu4DSz3BwszCyPum1f6GBhVhE3Q8ysOz91ama5OViYWTeN1b3rxMHCrCo1Cxalre4taZqkJWVd36zuFJHr6BelZBaSpgIXkTY2MbNWUb+h07IyiyHgGGB1Sdc3q78eb4xctlIyi4hYDSCp7efZ9msLADaSkw8bn+rWwVnJjmQRsTAiZkfE7EkDG1VRBbPq1Syz8PaFZlXo7faFjQGF27PXiyQtlXRa0+fPKSvKwcKsKr3NLD4HbCzpKGBCRMwBZkia2a5sNNUtdZ5FRMwt8/pmdVVwUtagpGVN7xdGxMJnryUdADwJ/JG0z2lj17HFpM2Qd2tTdm/ROntSlllFNJw7WqyIiNltryFNAj4GHAlcRZqu8GD28Upg9w5lhTlYmFWhd52XJwPnRsRj2ejjE8DG2Webkroa2pUV5j4Ls4poON/RxYHAeyXdCOwKvInUzACYBdwHLG9TVpgzC7Oq9CCziIh9G6+zgHE4sETSNsAhwN7ZnVrLCnNmYVaRXg6dQhpQyCZEzgVuAfaPiFXtykZTX2cWZlUIoKSHxCLiUdaOfnQsK8rBwqwidXuQzMHCrAJe/MbM8okorRlSFgcLs4o4szCzfBwszCwPZxZm1l0A+Z8N6QsOFmYV8dCpmeXj0RAzy8N9FmbWXZ+tr5mHg4VZBdIMznpFCwcLs6q4g9PM8nBmYWbdRXiehZnl49EQM8vHzRAz66qGu6g7WJhVxZmFmeVSr1jhYGFWFQ+dmll3AQzVK1h43xCzCohAke/oei1pM0nflbRY0pWSJklaJGmppNOazntOWREOFmZVaSza2+3o7jjgrIh4A2kn9WOBCRExB5ghaaako1rLilbXzRCzqvSozyIizm16uwXwNuCL2fvFpH1Od2PtJkONsnuL3MeZhVkVgvQgWZ4DBiUtazoWtLukpDnAVOD3wINZ8UpgGjC5TVkhzizMKlJgNGRFRMwe8VrS5sDZwN8DHwQ2zj7alJQUPNGmrBBnFmZV6VGfhaRJwNeBUyLifmA5qZkBMAu4r0NZIc4szKoQAcM9m+/9T8DuwKmSTgW+DBwvaRvgEGBvUsNnSUtZIQ4WZlXpUayIiPOA85rLJH0LmAecGRGrsrK5rWVFOFiYVaTMGZwR8ShrRz86lhXhYGFWFU/3NrOuvCNZcauHHllx3aoL76+6HgUNAiuqrkRud1ZdgVGp1/c42TH/qblnZ/aNyoNFRGxRdR2KkrSs27i3PT/j4nvsYGFmXQUwVK+lshwszCoREPUKFp7BOToLq64AgKSJkgaa3m8gaUDSlBH+zgxJU5veb9RyvYnl1biQvvgel6p3T52uFw4WoxARlfwgS9pH0vclXSPpQdLMvaslPSLpKuAq4LXA9ZLmSvq6pK9IukzSbtllTiA9gdhwlaT9JE0H3gFcKGm6pJ0kVZZ5VvU9Xm8aoyF5jj7hZkiNRMQSSZ8FDgYujIgrgfMlXRcRb26cJ+lQ0tOHQ8CppPUOBiUtBn5MNndQ0k7AU8CGwNHAHtnr+aSfjf8GHl9PX97400dZQx7OLOrnL8BeEXGlpL0l3QbcL+l8SXdI2hvYMyJ+nZ1/PvBC4Bng6ZZrnQ7cDVwPHErKOF4GHAb8JCIcKMpUs2aIM4sakXQcsCC91I3A94BrSY8fLwW2A+4CvimpESyGgNVtrnU06enD/4uIYUmTgeOzj99IykysLBEwNFR1LQpxZlEvlwBzgceA24CHsvKtyCYwZdnA4aRHkAVMBNZkr5vdBZzU9H5j4CXZsWUZlbcWziysLBHR6GsAOIX0WPIMYHvgd6wNCEcAO5OCxBRSv0MjcDSu9QtJmzRdfmvgxOz1VsD3y/o6LNNHgSAPB4uaioghSX8B7gf2JXVULs2GUt9P6qTcFTgKeDFwASmTfH37K7KCNJoCsGeJVTcA+mukIw83Q2pGKa0QQETcRcocfgBcnP15ImnE43Hgk8C/A38D3gXcQ+rAbDSWBQxImgCsAm7Kjl9l95qwPr6mcSkgYjjX0S+cWdRItnzaj4FLsv/I55AC/nuATYDLSMHhclK/w39ExAOSTic1M6YBPyX1d0AaJh0kdZI+nP3dhj1IPx+XlvpFjWc1yywUNWs32VqSto2IB5vebwI8FRH16mYfhzbbYIuYM+WIXOde99ii5f3wUJ0zixprDhTZ+79UVRcrqIZDpw4WZhWJ3i3Yu144WJhVor/mUOThYGFWBS+rZ2a59dGwaB4OFmYVCCCcWZhZV1G/lbIcLMwqEjUbOvWkLLMKSPoeafZsHisi4uAy65OHg4WZ5eIHycwsFwcLM8vFwcLMcnGwMLNcHCzMLJf/B58TJisJTyE/AAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 288x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 二元分类分类指标\n",
"from sklearn.metrics import confusion_matrix\n",
"import matplotlib.pyplot as plt\n",
"# 计算predictions 与 y_test的混淆矩阵\n",
"## TODO: 利用confusion_matrix模块计算混淆矩阵,并使用matplot展示\n",
"confusion_matrix = confusion_matrix(y_test,predictions)\n",
"print(confusion_matrix)\n",
"plt.matshow(confusion_matrix)\n",
"#添加图示\n",
"plt.title(\"混淆矩阵\")\n",
"plt.colorbar()\n",
"plt.ylabel(\"真实值\")\n",
"plt.xlabel(\"预测值\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"混合矩阵\n",
"横坐标为预测值\n",
"纵坐标为真实值\n",
"这样可以分为四个象限\n",
"\n",
"前面一个正负为真实值,后面的为预测值\n",
"正正(TP/00) 正负(FN 01)\n",
"负正(FP/10) 负负(TN/11)\n",
"\n",
"精准率可以解释为,预测为正例的样本中,有多少是真的正例\n",
"\n",
"召回率可以解释为,真实的正例的样本中,有多少被预测出来"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.2 precision、recall、f1-score"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" ham 0.96 1.00 0.98 1422\n",
" spam 0.99 0.76 0.86 250\n",
"\n",
" accuracy 0.96 1672\n",
" macro avg 0.98 0.88 0.92 1672\n",
"weighted avg 0.96 0.96 0.96 1672\n",
"\n"
]
}
],
"source": [
"# 自动计算precision、recall、f1-score指标\n",
"from sklearn.metrics import classification_report\n",
"print(classification_report(y_test,predictions))"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"平均精准率为: 0.9588394062078273\n",
"平均召回率为: 0.9992967651195499\n",
"平均F1值为: 0.9786501377410469\n"
]
}
],
"source": [
"## TODO:手动计算precision、recall、f1-score指标\n",
"# 精准率\n",
"precision = confusion_matrix[0,0]/(confusion_matrix[0,0]+confusion_matrix[1,0])\n",
"print(\"平均精准率为: \",precision)\n",
"# 召回率\n",
"recall = confusion_matrix[0,0]/(confusion_matrix[0,0]+confusion_matrix[0,1])\n",
"print(\"平均召回率为: \",recall) \n",
"# F1值 1/F1 = 1/2(1/precision+1/recall)\n",
"f1 = 2/(1/precision+1/recall)\n",
"print(\"平均F1值为: \",f1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.3 绘制ROC曲线"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\metrics\\ranking.py:659: UndefinedMetricWarning: No positive samples in y_true, true positive value should be meaningless\n",
" UndefinedMetricWarning)\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAYcAAAETCAYAAADd6corAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nO3dd5gUVdbH8e8BgSGp6KKY07qioqCMAQWWZEIUdRFZE5iQ1TXs6ioqJnRdRcU1rwiuukZMYCSIIqCgDiqoiBkVXkGSAWUGgfP+cWucZpjEMNXV3fP7PM88U919u/p0wfTpe2/dU+buiIiIpKqTdAAiIpJ5lBxERGQtSg4iIrIWJQcREVmLkoOIiKxFyUEkBmZm6/t8M2tcU/GU3ncm7ksyi5KDrBcza2Rmm5nZDmbWxsx6mNn5ZvZfM9soalO/nOeebGa7mllXMyv3/6KZfWJmf6gkjqlm1jzaHmRm75vZxOjn/TLaNzWzaWa2RXT7NTM7pIL9dzCz50vdd46ZXVHOUwaY2T0VxVzO66w0sybATsBnFbQ71Mx2S7ndy8z+WNFxjNodB5yzrnFV4Egzu6gG9ycZQslBqsXMhprZd8DbwGPAbcApQD7QAngTaBY1f9TM+pSxm65AS6B/9PzU/eeZWd3oZhHwq5nVM7M6ZvZvM9un1L5WAD+nbF/i7p3cvVN0u7QjAHf3b82sFbAt8EoFb7kQ+DGKbYPoQ/iXKC4zs4YpsW8BXA7ca2b/MLMvzGy2mc0xs0+jZDffzLYs43WWu/uy6D0XlRVI9No3A3kpdx8ItAGuNrN/lPO8bYEzgf+YWT8zW25mC6Kfm4p7AWZ2hJl9ZWaLzOzalOdvHyXh78xsmJnVA54F9jez/So4dpKFlBykWtz978D5wN3u3gVoCLzo7lcBvwf2c/c5UfOzgfPNrImZbZCym0LAgdOAiaVe4l/A22ZWQPgWPRqYDtxI+GBfCGBm25jZ0cAmwBFmtln0/OvMbIqZTQFWlfEW/gbcHW1fCjQFpppZQfTzrpl1iV7jZWADYHXU/kigABgUvbe3geeitptE29cD0939Rnff0d1bEnoCZ7j7H9y9hbv/XxlxFcda0erUE4GngUIz6xrd9zPheF4PLDCzfct43mDgQncvTpaj3X1zYHegO6EX0Az4H/BnYBfgeDM7NGr/IOGLQAvC8T7Fwyra84CrK4hXstAGlTcRKdebwC3AHcAQoLmZdSD0Bn77cHL3+WZ2AHAGcJaZ/Ro9tBVwMLAYyDOzZ4s/uNz9b8XPN7P3gKOAVoTk0Nndv44e3o7wQbYZ0Av4yN2HRPGUycx6EHo435nZgdH2JcB27j4oalM3+r0j0JowFLO3mV3j7pcDT5tZP6CFu1+fsvu2wCfAy8A0M+vo7mX2AFLiWUpIHEVAkyih1QdaRNt5wLbuvpmZ7Qz8hfBhPhyYaWabAgdEx7M3sARoBLyV8hoNovf3TunXd/dFUQLchfCZ8JG7vxE97zGgh5nNBvYkHPvVZvYkcDQwzN2/MbNfzGwrd59X0XuV7KHkINViZlOJho2iD45iLQjDOO+Y2RJC4jgd+Nrd+wH3pOzjQmClu/875b6tgLHAT5R8i96E0LNoBMwHHonG5c9x98nAFDObSBjWuszMHoyeczqhd/AtsAfQHKgLDI32AyG5XQBsWvotuvvKqPcwBHiV0FO6wsweB/4Q7cvM7O/Razzg7kOjD9qxhGGqlWa2hbt/W8Hh/BU41t3nmNn37t7ezLYGpkTbvwdei9oeCmwBTAYWACOBvsDHwGR3vzIadmprZpu6++LoeTsCH5X14lFy6UQYCvsD8FXKw18DPQiJ+XN3L/43GQPMSGn3JuEYKznkCCUHqa7t3X2LihqY2bfu/oiZvQI8Ed03lvANtJDwofv71OdE3zxbRW3rAHsB/wZeB65IGRJJfR0D6gH/BH5HGBbZhzAMtAC4Cbg2un1GtK/m0dMPdfclUS/g9KhXYYQPvpMJPYAVwJbR/W3d/bhSrz/b3Vun3HUucBDhg3xLYCqwTfTYPWb2C7DK3fOj+1ZTueJhprvc/fYoQV1J+PB+HjgBOCbqCTWJ7h9E6JVBSORLS+2zp5nNj47FzYT5g0GsOdexgjBkuDGw7Ldg3L8Hvk9pt5SSOSbJAUoOUl2XmFkb4AXCB0jxB0p9YFLUSzghpf0qAHc/JPqW34fwoXR0WTs3s0aEb8vbEHoR3YBuZpYHvOXup0btehDmJ1oQJraLgO0JH+7dCRPdywjf+lcDIwhj549G8SxJednhxcNKKb4C9gbOivb3jZkdE20X297MZgI3RK81APglGn4pZM0P2zPdfWIZb/kJM6toWKmYm9lAwjf0IsJ8QR9gFrAfYT7kNMJ8xycpz1vM2r2j0YQhuVnAeHf3KHGlvl4Doon3aBuAaBK/q7vfGt31O2BOGe9LspSSg1SLu98PEE2IPkL4pu6EydkRUZs1zv6JhoIKU+6aBexpZnWLhyssnP56KmGMf0OgV+qHqZl1Inz7LzYV6ACMInyQPwNsRPiWvwtwCPAD4cP2Hne/lzCRW+H7M7MN3H1ltO9rCMNKL7j7QAun5j7m7jOjtrMJZwrVIfSK/szaE+yVqWxYqXh/mxMmgD+O4rrD3f8axXEWYT7itCiGVF8Au5Z+0Sgh3EGYWB8fteud0mQ74EvCnMgOKfe3IZwhVZwc2hHmQCRH6GwlWS/uPpvwDfROwtDEa9E8QGnNgAmEiVMI38Z3IgzxdLGwjqARYV6hJeE01ymEYZjiM4gKCHMWv53J4+6LoyGOYocC/QjDTB8RhlcedPf8KDFU5HQzey+aAJ9hZs3cfZK7/5EwdFNsJeH03F1S4ljt7ivd/R13f6+S16k2d/82Gs47nDCf8gf4bQjuK8JZWJ2AmaWe9yvwkZm1L2O3DwAdLJzq+iqwi5m1j+YijiOcffUu8L2ZnRKdwnpi1JZoktzd/buafr+SHCUHWS9m1pTwLfZ4wnDKu7b2+fs7EL613gtcSFhT8GfC8MV/CKeSXggcE334nenuX0bPPTP6YM+PxujPJPQKil/fzGx7wgT0KsK33icIk9GLi/drZs9EQyHF6qTuJzLc3dtEP7u7e+oYvRW3d/fVhHkFt3Bqbll/RxtEQ2B1y3gMM6tvJaf1GmFYaQolw0pPUzKs9FjK87qZ2TxgUvRevzezPQiJ9yvCPMD+hInzU0u97JXAv6J/s99E6yoeBAZEifZE4GHCv+tD7j4+es+HE3ol30SvNTx6D7cDl5X1PiV7aVhJqsXMriJ8wK8inLmST5h7OAX4a/SBPTGavJ0LHOXuL5rZdGBmylkvmNkZhDH81OEiCGPc95jZTyn3NQV+W/EcDYvcDrxEmFPYB+jh7l9G33B/BQ4jTC6nnjFUjzDUlHq7XgVvuQEpY+7uPiH6xrwQuK+M9vWAvxNOr/0+6vUAFC82qw9cBTwV7ffYlHUha4iGld6Ibk4E9ileI2FmPQm9mvPd/ZnouI8hTITvlbofd19Q/O/m7sOA+1Me+1vK9vOs2VMqvv8zYI2eh5kdDjzq7mutQpfsZq4rwUk1mNnGhDNufqqgTZ3oG2dl+zJgo1LDQ1nBzMwT/iMys/qpZ3FFcyIbuvuiBMOSLKfkICIia4ltzsHMNjezsiYmix+vZ2bPmdnrZYyNiohIgmJJDhbqszwAVFRy+BzCudgHAr1KT5KJiEhy4pqQXkU4BW50BW06AQOj7UmECc1XUxuYWX/CwiYaN27ctmXLljUeqIhITpo7FxYuZPrq1YvcvXnlT1hTLMnB3YtLG1fUrDEldViWEBb3lN7PMGAYQH5+vhcUFJRuIiIixT78EAoLoW1bWLYMvv8e22abryp/4tqSXOewjFCzBUItGK25EBGpjhUrYPBg2GsvOP/8cF+TJrD11tXeZZIfyNMpOWe6NarLIiKy7t5+G/Lz4coroVcvePrpGtltWhbBRWWPd3P3O1LufgB40UL9/90IJX9FRKSqXnsNunSBLbaAZ5+FI46osV3H2nPwcIlG3P2VUokBd/+KUNb4daBb6opZERGpwNKossuBB8I114S5hhpMDJDwOL+7/5+7j3T3H5KMQ0QkK/zwA5x5JrRsCYsWwQYbwKWXwkYb1fhLaRJYRCQbPP887L47DB8OJ58MjRrF+nIqvCciksmKiuCUU+DRR6FVqzDhvO++lT9vPannICKSyerXh9Wr4eqrYfr0tCQGUHIQEck8c+fCscfCp5+CWeg1XHFFSBRpouQgIpIpVq+GYcPC3MILL8CMGeH+Si5rGwclBxGRTPDZZ9C1azgbqW1beP/9sKgtIZqQFhHJBHfdBe+8A/feC6edlkhvIZV6DiIiSXn/fSguKDp4MMyaBaefnnhiACUHEZH0KyoKtZD23hv+Fl2+u0kT2GqrZONKoeQgIpJO06aFpDB4MPTpA6NGJR1RmTTnICKSLhMnhkJ5W20Vzkbq3j3piMqlnoOISNwWLw6/O3SAf/0rFMrL4MQASg4iIvH5/ns44wzYdddQKK9uXbj4Ythww6Qjq5SSg4hIHJ59Nixmu+++UBupceOkI1onmnMQEalJRUXQty88/jjsuSeMHh2u1JZl1HMQEalJDRpAnTrhIjwFBVmZGEDJQURk/X39NRxzDHzySbj98MMwaBDUq5dsXOtByUFEpLpWr4a77w5zC2PHwgcfhPszYIXz+lJyEBGpjk8+gU6d4KyzoF27cHrqMcckHVWN0YS0iEh1DBsWaiPddx/065cTvYVU6jmIiFTVjBnw9tth++qrQ6G8U07JucQASg4iIpUrKoLLLw9nHl1wQbivcWPYYotk44qRkoOISEWmToW99oJrr4Xjj4dnnkk6orTQnIOISHmKC+Vtsw289BIcemjSEaWNeg4iIqUtWhR+d+gAN9wQTlGtRYkBlBxEREosXQqnnhoK5S1cGArl/eMf0LRp0pGlnZKDiAjA00/DbrvBgw+GSqq1MCGk0pyDiNRuRUVwwgnw1FPQpg28+GKYgK7l1HMQkdqtQQPIy4PrroO33lJiiCg5iEjt89VX0LMnfPxxuP2//8Ell2R1obyapuQgIrXH6tVwxx2hUN6ECWGFM+TkCuf1peQgIrXDxx9Dx45wzjnQvn0olHf00UlHlbE0IS0itcO994aewv33w8knq7dQCfUcRCR3vfsuvPlm2C4ulNe3rxJDFcSWHMxshJlNNbNB5TzezMxeNLMCM7snrjhEpBYqLAwTzPvsAxddFO5r3BhatEg2riwSS3Iws2OAuu7eDtjRzHYuo9lJwMPung80NbPsvNCqiGSWKVOgdWu4/vowfDRqVNIRZaW4eg6dgJHR9jigfRltFgOtzGxjYBvgm9INzKx/1LMoWLhwYUyhikjOePXVUA9pxQoYNy5ciKdZs6SjykpxJYfGwLxoewmweRltpgDbAecCH0Xt1uDuw9w9393zmzdvHlOoIpL1ir88duwIN98crtB20EHJxpTl4koOy4CG0XaTcl7nSmCAuw8GZgOnxBSLiOSqJUvCBPNuu5UUyvv736FJk6Qjy3pxJYfplAwltQbmlNGmGbCHmdUF9gM8plhEJBc9+WSonvrIIzBgAGy4YdIR5ZS4ksMo4CQzGwr0Bj40s2tLtfkXMAz4AdgEeDSmWEQklxQVwZ/+BMceC1tvDQUFcM01oUaS1JhYFsG5+49m1gk4CBji7vOBGaXavAXsHsfri0gOa9AAGjUKZyNdcAFsoLW8cYhtnYO7L3X3kVFiEBGpvi+/hB49YPbscPvBB+Hii5UYYqQV0iKSuVatgltvhVatYNKkkiqqWuEcOyUHEclMs2aFNQvnnw9//GMolNezZ9JR1Rrqk4lIZvrvf+GTT+Chh+D449VbSDP1HEQkc0yfDtOmhe3iQnknnKDEkAAlBxFJ3vLlYYJ5v/3CbwhnJG22WbJx1WJKDiKSrEmTQqG8IUPglFNg9OikIxI05yAiSXr1VejSBXbYAV5+Gbp2TToiiajnICLpt2BB+N2xIwwdGgrlKTFkFCUHEUmfRYvgxBNDobzvvguF8v72t3AhHskoSg4iEj93ePzxkBRGjoRzzoGNNko6KqmA5hxEJF5FRdC7Nzz7bLhs54gRsMceSUcllVDPQUTi1aBBuBrbTTfB1KlKDFlCyUFEat4XX0D37iWF8u6/P1RQrVs30bCk6pQcRKTmrFoFt9wSCuW9/noofyFZSclBRGrGBx/AAQeEy3R27RoK5R15ZNJRSTVpQlpEasYDD4ThpEcegT59VA8py5l7dly6OT8/3wsKCpIOQ0RSvfVWGEpq1w5++QV+/hmaN086KklhZtPdPX9dn6dhJRFZd7/8AhdeGJLCpZeG+xo1UmLIIUoOIrJuXn01nI56881wxhkwalTSEUkMNOcgIlX3yithsnmnnUKS6NQp6YgkJuo5iEjlvv02/O7UKVzTeeZMJYYcp+QgIuVbuDBcorNVq1Aor04dOPfcML8gOU3JQUTW5h5OSd11V3jySTjvPNh446SjkjTSnIOIrKmoCHr1guefD5ftHDECdt896agkzdRzEJE1NWgQTkkdOjSUwFBiqJWUHEQEPv0UDjkEZs0Kt++7L1yER4Xyai0lB5HabOVKuPFG2HNPePNN+PzzpCOSDKE5B5HaauZMOO00KCiAnj3hrrtgyy2TjkoyhJKDSG318MPw9dfhsp29eqlQnqxBhfdEapM33wyF8g44INRHWr4cNt006agkRiq8JyLl+/nncJ2Fdu3gssvCfY0aKTFIuZQcRHLdhAmhUN4tt8Bf/gKjRycdkWQBzTmI5LIJE6BbN9h5Z3jtNejYMemIJEuo5yCSi+bNC787d4bbb4cZM5QYZJ0oOYjkkgULoHfvMIy0YEEolPfXv0LDhklHJlkmtuRgZiPMbKqZDaqk3V1mdkRccYjUCu7wv//BbruFOYULL4RNNkk6KslisSQHMzsGqOvu7YAdzWznctp1AFq4+3NxxCFSKxQWwuGHw8knwy67wHvvhUt31quXdGSSxeLqOXQCRkbb44D2pRuYWT3gXmCOmfUsaydm1t/MCsysYOHChTGFKpLl8vLCyubbboPJk0OZbZH1FFdyaAxEM2IsATYvo83JwCxgCLCvmZ1TuoG7D3P3fHfPb64Ll4uU+OQTOOigkkJ5w4fDOeeoUJ7UmLiSwzKgeAasSTmvsxcwzN3nAw8BnWOKRSR3rFwJN9wQCuUVFMCXXyYdkeSouJLDdEqGkloDc8po8xmwY7SdD3wVUywiuWHGjHDxnYEDoXv30Gs4/PCko5IcFdciuFHAZDPbEjgM6GNm17p76plLI4D7zKwPUA/oFVMsIrnhkUfC+oUnn4Q//SnpaCTHxVZ4z8yaAQcBk6Kho/WiwntSK73xRjhN9cADQ5G85ct1iqqsk4wrvOfuS919ZE0kBpFaZ9kyOPdcaN8eLr883NewoRKDpI1WSItkmnHjoFUruOMOOPtsFcqTRKjwnkgmmTAhXMt5l11g0qTQcxBJgHoOIplg7tzwu3PncLnO995TYpBEVZoczKxBqdsbmNmp8YUkUovMnx8u0bnnniWF8v7yl7DqWSRBFSYHM6sLTDKzqy3oB1wAHJ2O4ERyljs88EAolPf883DRRZpsloxSYXJw91XAcuBz4CjCquZHgZXxhyaSowoL4bDDoF8/2H33sLht4EAVypOMUpU5ByfUSXoRaAbcFN0nItWRlwfbbhvORnrttTD5LJJhKhtWOo6QCLYBHgPuAeoDW5lZbzM7Pv4QRXLA7NnQtWtJobxhw8JpqnV0Tohkpsr+Z24ObEuogbQzcCbQFMgDtgC2jjU6kWz3669w3XXQujW8+y7MmZN0RCJVUuE6B3e/zcyOBr4AfibUQzoP+MHdb01DfCLZ65134LTTwmmpxx4bruW8eVnV60UyT1X6tHWAhUBf4BDg9FgjEskVI0eGU1WffjpsKzFIFqlszmEDwnUZ9gW+JFzd7Z+UXKtBRFJNmRJ+AK68MswxHK0zvyX7VDastJKQGIq9Z2YXA6oXLJLqp5/gkkvgzjuhS5dQBqNhw/AjkoXW+VQJd//R3f8bRzAiWWnMmFAo76674LzzVChPckKFPQczex0oBFaXfghoAJzn7u/EFJtI5nv55bCgbddd4fXXoV27pCMSqRGVVWVd4e5dy3rAzMYrMUit5B4K5W2zTRhC+s9/wmrnBg0qfapItqhsWMkBzOwWM3sl+nkkDXGJZKZvvw2X6EwtlHfmmUoMknOqej2HVu7eBcDMXokxHpHM5A7//S/8/e9QVASDB8OmmyYdlUhsdLEfkcoUFsIRR4T5hY4dYfhw2HnnpKMSiVVVk8M8M3su2l4eVzAiGSkvD3baKQwn9e+vekhSK1QpObh7v7LurtlQRDLIrFlw1llh3cLuu4dJZ5FapLLksF00x1D6+g11ga3NrI27vxdPaCIJWLECbrgBrr0WmjaFb74JyUGklqlshfRO6QpEJHEFBaFQ3syZ0KcP3HorbLZZ0lGJJKKyRXBXAPOBb4C33H2xmfWmpCdRz90fjzlGkfR46ilYtCiscD7yyKSjEUlUZTNrxxKGkDoCM81sO+B6YAfgBmCreMMTidlrr8HkyWH7yivhww+VGESofM5hvrvfDWBmdQnJYK6732xmPdx9aOwRisThxx/h4ovDRHPXruE01by88CMiVVshDeDuF7n7GzHHIxK/F14Ik8zDhoVFbSqUJ7KWypJDGzO70cz2Tks0InF7+WXo0QM22gjeeANuvhkaN046KpGMU1ly+BSYAvzLzG4r9ZjWOUh2cIevvgrbXbrAvfeGS3jut1+ycYlksMqSw3J3Hw0cSljXcAqwq5m9A/zBzN6NPUKR9TFvHhx1FLRpEy7ZWacOnH461K+fdGQiGa3cCWkzqwN8AODubmZnEHoRLdx9VZriE6ke91AD6cIL4ddf4ZproHnzpKMSyRrlJgd3Xw2cn3J7sZmdqsQgGa+wEA4/HF55BTp1CsNIv/990lGJZJV1qsrq7lPjCkSkxuTlwS67wHHHhSEkFcoTWWf6q5Hc8MEHoZz2+++H23fdpQqqIushtr8cMxthZlPNbFAl7TbXxLZU24oVcPXVsPfe8NFH8H//l3REIjkhluRgZscAdd29HbCjmVV0ZZSbgIZxxCE57q23oG1buOoqOPbYUGb7kEOSjkokJ8R1JbhOwMhoexzQnrBmYg1m1gX4mVDcby1m1h/oD7DtttvGEadks1GjYOlSeO65sLBNRGpMXMNKjYF50fYSYPPSDcysPnA5MLC8nbj7MHfPd/f85joNUQBefTUUywO44opQKE+JQaTGxZUcllEyVNSknNcZCNzl7t/HFIPkkh9+gDPPDCucr7023JeXF8pgiEiNiys5TCcMJQG0BuaU0aYbcLaZTSTUcBoeUyyS7Z57DnbbLSxq+8c/VChPJA3imnMYBUw2sy2Bw4A+Znatu/925pK7dyzeNrOJ7n56TLFINhs3LlxfYY89QlLIz086IpFaIZaeg7v/SJiUngZ0dvcZqYmhjPad4ohDspQ7fPll2O7WDUaMCJfwVGIQSZvY1jm4+1J3H+nuZZ6JJFKmuXNDT2GvvUoK5Z16qgrliaSZlo9KZli9Gu65J8wtvPJKWLugM9REEhPXnINI1RUWwmGHwcSJ4ZKdw4bBjjsmHZVIrabkIMlxB7NwSupuu8EJJ8Bpp4X7RCRRGlaSZMycCe3blxTKu/POUEFViUEkIyg5SHoVFYWVzW3bwmefhUlnEck4GlaS9Jk2LQwbzZoFJ50Et9wCm26adFQiUgYlB0mf55+Hn36CF18ME9AikrE0rCTxmjChpFDeoEHhojxKDCIZT8lB4vH992GCuVs3uO66cF9eHmy4YbJxiUiVKDlIzRs9Opyaev/9MHBguO6CiGQVzTlIzRo3Do46Clq3DtVU27ZNOiIRqQb1HGT9ucPnn4ftbt1Cj+Htt5UYRLKYkoOsn6+/hu7dQyIoLpTXty/Uq5d0ZCKyHpQcpHpWrw6rmnffHSZPhmuuUaE8kRyiOQdZd4WFcPDBISkcdFAolLf99klHJSI1SMlBqi61UF6bNuE6C337qh6SSA7SsJJUzYwZcMABoWAewG23Qb9+SgwiOUrJQSpWWBhWNufnh0t3fvdd0hGJSBpoWEnK98YboVDe7Nlh+GjoUNhkk6SjEpE0UHKQ8r34IvzyC4wZA4ccknQ0IpJGGlaSNY0bB6++GraLC+UpMYjUOkoOEixZAqecEhLB9deH+/LyoGnTZOMSkUQoOQg89VQolPe//8Fll4XCeSJSq2nOobYbOxZ69YK99gpzC23aJB2RiGQA9RxqI/dw/WYIK5wffBDeekuJQUR+o+RQ28yZA4ceumahvJNOgg3UiRSREkoOtcXq1XD77dCqVVi/cN11sNlmSUclIhlKXxdrg+XLw/DR66+Hs5HuuQe22y7pqEQkgyk55LLiQnkNG4byF/37hyEk1UMSkUpoWClXvfMO7LtvKJgH8O9/w8knKzGISJUoOeSa5cth4MCQGObOhcWLk45IRLKQkkMumTw5nI56ww2hnPasWdClS9JRiUgW0pxDLhk/HlasCL+7dUs6GhHJYuo5ZLuXXoJXXgnbl10WCuUpMYjIelJyyFaLF4cJ5u7dYciQcF+DBtC4cbJxiUhOiC05mNkIM5tqZoPKeXwjM3vJzMaZ2TNmVj+uWHKKOzzxRCiU9+ijcPnlKpQnIjUuluRgZscAdd29HbCjme1cRrMTgKHufjAwHzg0jlhyzrhx0Ls3bLMNFBTA4MGhxyAiUoPi6jl0AkZG2+OA9qUbuPtd7j4+utkcWOvixGbW38wKzKxg4cKFMYWaBdzhk0/C9sEHw0MPwbRp0Lp1snGJSM6KKzk0BuZF20uAzctraGbtgGbuPq30Y+4+zN3z3T2/efPm8USa6b74IpS+yM+Hb78Ni9hOOEGF8kQkVnElh2VAw2i7SXmvY2abALcDp8YUR/ZatSqsat5jj1BOe8gQ2LzcHCsiUqPi+vo5nTCUNA1oDXxcukE0Af0EcIm7fxVTHNlp+fKweG3aNDj8cLj77jDHICKSJnH1HEYBJ//gMgYAAAy5SURBVJnZUKA38KGZXVuqzWnA3sBlZjbRzI6LKZbs4R5+N2wI7drBww/Dc88pMYhI2pkXfyDV9I7NmgEHAZPcff767i8/P98LCgrWP7BMVVAAAwbA8OG6IpuI1Bgzm+7u+ev6vNjWObj7UncfWROJIactXw4XXQT77RcmnJcuTToiERGtkE7Ua6/BnnvCjTfCaaeFQnmdOycdlYiICu8lasKEcPnOCRNUPVVEMop6Dun2wgvw8sth+7LLYOZMJQYRyThKDumycGFYvNajBwwdGu5ToTwRyVBKDnFzh8ceC4XynngCrroKRo1KOioRkQppziFuY8fCn/8cLts5YgS0apV0RCIilVLPIQ7uMHt22D7kkFBa+403lBhEJGsoOdS0zz+Hrl1DT2H+/FAor08fqFs36chERKpMyaGmrFoVJpr32AOmT4ebb1ahPBHJWppzqAnLl4fFa2++CUccEQrlbbVV0lGJiFSbeg7rI7VQXvv2YW5h9GglBhHJekoO1fXmm7DXXvDee+H2TTeFuQWzZOMSEakBSg7r6pdf4IIL4IADYPFi+OGHpCMSEalxSg7r4tVXw4Tz0KFw5pnw4Yfwxz8mHZWISI3ThPS6eO01qFMHJk5UUhCRnBbbxX5qWmIX+3n22TDhfNBBsGIFrFwJjRqlPw6RHPLrr78yd+5cCgsLkw4lZ+Tl5bH11ltTr169Ne6v7sV+1HMoz3ffwbnnwuOPQ/fuITnUrx9+RGS9zJ07l6ZNm7L99ttjOoljvbk7ixcvZu7cueywww41sk/NOZTmHq7dvNtu8PTTMHgwPPNM0lGJ5JTCwkI23XRTJYYaYmZsuummNdoTU8+htLFj4cQTYf/9w/Wcd9896YhEcpISQ82q6eOpngOEq7HNmhW2DzkkDCVNmaLEICK1lpLDp5+G0hf7719SKK93bxXKE8lxS5YsoWnTpr8NxfTr148pU6YAcNVVV/HQQw+xatUq+vfvT4cOHejbty+rV69OMuS0qr3JYeVKGDIE9twTZsyAf/9bhfJEapHx48dTWFjIpEmTym3z+OOPU1RUxOTJk2nRogWjyrlQV8+ePenUqdNvP8OGDYsr7LSpnXMOy5dDx45QUABHHQV33glbbpl0VCK10vnnl1ShqSlt2oTvexUZM2YMZ599NmPGjOHggw8us83YsWM5/PDDATjuuOP4+eefy2w3evToasfar18/dtxxR8aPH8+qVauYMGECS5cupXfv3pgZHTt25J///GeZ7Ro2bFjt161M7eo5pBbK69wZRo4MZyQpMYjUOlOnTmXQoEFMmDCh3DYLFixgk002AWDvvfemQ4cOscSybNkyJk+eTMuWLXn33XeZN28e119/PS+99BLPPfdcue3iVHt6DlOnwoABcP/9oWDekCFJRyQiVP4NPw4zZ85k0aJF9OrVizlz5vDNN9+sdbaPmbHhhhuybNkyAEaNGsWyZcs48cQT19pfz549+SGlztrxxx9P//79qxxP3759Adh2221ZsWIFDRs25Oqrr6ZJkyb89NNP5baLU+73HH7+OfRbDzwQli6FlAMtIrXT2LFjufTSS5k4cSLnnnsuY8eOZfPNN+eLL74A4IsvvqBFixYceOCBjB8/HghzFBtvvHGZ+xs9ejQTJ0787WddEgNA48aN17g9dOhQLrnkEoYPH75G0irdLk65nRwmTAjXbb71VjjrrFAor2PHpKMSkYSNHTuWLl26ANClSxfGjBnDgAEDuOeee+jQoQOFhYV07tyZ/v37s2TJEtq3b8+PP/5I9+7d0xJfjx49GDBgAEceeSSNGjVi3rx5aXndVLldW+mqq8IFeIYPh5jGCkVk3X300UfsuuuuSYeRc8o6rtWtrZR7PYdRo2DcuLB96aXhNAglBhGRdZI7yWHBgrB47eij4fbbw33164czk0Qk42TLqEW2qOnjmf3JwR0efBB23TWU177uunB6qohkrLy8PBYvXqwEUUOKq7Lm5eXV2D6z/1TWMWOgb99w2c4RI6Bly6QjEpFKbL311sydO5eFCxcmHUrOKL6eQ03JzuRQXCivVSs49FB48skw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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import roc_curve,auc\n",
"## 绘制ROC曲线\n",
"# 利用逻辑回归的predict_proba函数输出预测概率\n",
"predictions_pro = LR.predict_proba(X_test)\n",
"\n",
"#自行添加的\n",
"# 有时必须要将标签转为数值\n",
"from sklearn.preprocessing import LabelEncoder\n",
"class_le = LabelEncoder()\n",
"y_train_n = class_le.fit_transform(y_train)\n",
"y_test_n = class_le.fit_transform(y_test)\n",
"\n",
"\n",
"# 利用roc_curve函数生成如下指标\n",
"false_positive_rate, recall, thresholds = roc_curve(y_test_n, predictions_pro[:,1], pos_label=2)\n",
"\n",
"roc_auc = auc(false_positive_rate, recall)\n",
"plt.title(\"受试者操作特征曲线(ROC)\")\n",
"plt.plot(false_positive_rate, recall, 'b', label='AUC = % 0.2f' % roc_auc)\n",
"plt.legend(loc='lower right')\n",
"plt.plot([0,1],[0,1],'r--')\n",
"plt.xlim([0.0, 1.0])\n",
"plt.ylim([0.0, 1.0])\n",
"plt.xlabel('假阳性率')\n",
"plt.ylabel('召回率')\n",
"plt.show() "
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1421, 1],\n",
" [ 61, 189]], dtype=int64)"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"confusion_matrix\n"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"61"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"confusion_matrix[1,0]"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1672,)"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predictions_pro[:,1].shape"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.0618445 , 0.0518017 , 0.02134218, ..., 0.66665959, 0.02274288,\n",
" 0.0682999 ])"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predictions_pro[:,1]"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 1, ..., 0, 0, 0], dtype=int64)"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_train_n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.4"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 2
}
{
"cells": [
{
"cell_type": "code",
"execution_count": 1,
"metadata": {},
"outputs": [],
"source": [
"import matplotlib\n",
"matplotlib.rcParams['font.sans-serif']=[u'simHei']\n",
"matplotlib.rcParams['axes.unicode_minus']=False"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [],
"source": [
"import pandas as pd\n",
"import numpy as np\n",
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"from sklearn.linear_model.logistic import LogisticRegression\n",
"from sklearn.model_selection import train_test_split,cross_val_score"
]
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<bound method NDFrame.head of 0 1\n",
"0 ham Go until jurong point crazy.. Available only i...\n",
"1 ham Ok lar... Joking wif u oni...\n",
"2 spam Free entry in 2 a wkly comp to win FA Cup fina...\n",
"3 ham U dun say so early hor... U c already then say...\n",
"4 ham Nah I don't think he goes to usf he lives arou...\n",
"5 spam FreeMsg Hey there darling it's been 3 week's n...\n",
"6 ham Even my brother is not like to speak with me. ...\n",
"7 ham As per your request 'Melle Melle (Oru Minnamin...\n",
"8 spam WINNER!! As a valued network customer you have...\n",
"9 spam Had your mobile 11 months or more? U R entitle...\n",
"10 ham I'm gonna be home soon and i don't want to tal...\n",
"11 spam SIX chances to win CASH! From 100 to 20000 pou...\n",
"12 spam URGENT! You have won a 1 week FREE membership ...\n",
"13 ham I've been searching for the right words to tha...\n",
"14 ham I HAVE A DATE ON SUNDAY WITH WILL!!\n",
"15 spam XXXMobileMovieClub: To use your credit click t...\n",
"16 ham Oh k...i'm watching here:)\n",
"17 ham Eh u remember how 2 spell his name... Yes i di...\n",
"18 ham Fine if that?s the way u feel. That?s the way ...\n",
"19 spam England v Macedonia - dont miss the goals/team...\n",
"20 ham Is that seriously how you spell his name?\n",
"21 ham I‘m going to try for 2 months ha ha only joking\n",
"22 ham So ü pay first lar... Then when is da stock co...\n",
"23 ham Aft i finish my lunch then i go str down lor. ...\n",
"24 ham Ffffffffff. Alright no way I can meet up with ...\n",
"25 ham Just forced myself to eat a slice. I'm really ...\n",
"26 ham Lol your always so convincing.\n",
"27 ham Did you catch the bus ? Are you frying an egg ...\n",
"28 ham I'm back &amp; we're packing the car now I'll ...\n",
"29 ham Ahhh. Work. I vaguely remember that! What does...\n",
"... ... ...\n",
"5542 ham Armand says get your ass over to epsilon\n",
"5543 ham U still havent got urself a jacket ah?\n",
"5544 ham I'm taking derek &amp; taylor to walmart if I'...\n",
"5545 ham Hi its in durban are you still on this number\n",
"5546 ham Ic. There are a lotta childporn cars then.\n",
"5547 spam Had your contract mobile 11 Mnths? Latest Moto...\n",
"5548 ham No I was trying it all weekend ;V\n",
"5549 ham You know wot people wear. T shirts jumpers hat...\n",
"5550 ham Cool what time you think you can get here?\n",
"5551 ham Wen did you get so spiritual and deep. That's ...\n",
"5552 ham Have a safe trip to Nigeria. Wish you happines...\n",
"5553 ham Hahaha..use your brain dear\n",
"5554 ham Well keep in mind I've only got enough gas for...\n",
"5555 ham Yeh. Indians was nice. Tho it did kane me off ...\n",
"5556 ham Yes i have. So that's why u texted. Pshew...mi...\n",
"5557 ham No. I meant the calculation is the same. That ...\n",
"5558 ham Sorry I'll call later\n",
"5559 ham if you aren't here in the next &lt;#&gt; hou...\n",
"5560 ham Anything lor. Juz both of us lor.\n",
"5561 ham Get me out of this dump heap. My mom decided t...\n",
"5562 ham Ok lor... Sony ericsson salesman... I ask shuh...\n",
"5563 ham Ard 6 like dat lor.\n",
"5564 ham Why don't you wait 'til at least wednesday to ...\n",
"5565 ham Huh y lei...\n",
"5566 spam REMINDER FROM O2: To get 2.50 pounds free call...\n",
"5567 spam This is the 2nd time we have tried 2 contact u...\n",
"5568 ham Will ü b going to esplanade fr home?\n",
"5569 ham Pity * was in mood for that. So...any other su...\n",
"5570 ham The guy did some bitching but I acted like i'd...\n",
"5571 ham Rofl. Its true to its name\n",
"\n",
"[5572 rows x 2 columns]>\n",
"垃圾邮件个数:747\n",
"正常邮件个数:4825\n"
]
}
],
"source": [
"df = pd.read_csv('./SMSSpamCollection.csv',header=None)\n",
"print(df.head)\n",
"\n",
"print(\"垃圾邮件个数:%s\" % df[df[0]=='spam'][0].count())\n",
"print(\"正常邮件个数:%s\" % df[df[0]=='ham'][0].count())"
]
},
{
"cell_type": "code",
"execution_count": 23,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"['Its normally hot mail. Com you see!'\n",
" \"Love isn't a decision it's a feeling. If we could decide who to love then life would be much simpler but then less magical\"\n",
" 'when you and derek done with class?' ...\n",
" 'Indians r poor but India is not a poor country. Says one of the swiss bank directors. He says that \" &lt;#&gt; lac crore\" of Indian money is deposited in swiss banks which can be used for \\'taxless\\' budget for &lt;#&gt; yrs. Can give &lt;#&gt; crore jobs to all Indians. From any village to Delhi 4 lane roads. Forever free power suply to more than &lt;#&gt; social projects. Every citizen can get monthly &lt;#&gt; /- for &lt;#&gt; yrs. No need of World Bank &amp; IMF loan. Think how our money is blocked by rich politicians. We have full rights against corrupt politicians. Itna forward karo ki pura INDIA padhe.g.m.\"'\n",
" \"Annoying isn't it.\"\n",
" 'U meet other fren dun wan meet me ah... Muz b a guy rite...']\n"
]
}
],
"source": [
"# In[1]\n",
"X = df[1].values.astype('U')\n",
"y = df[0].values.astype('U')\n",
"X_train_raw,X_test_raw,y_train,y_test=train_test_split(X,y)\n",
"vectorizer = TfidfVectorizer()\n",
"X_train = vectorizer.fit_transform(X_train_raw)\n",
"X_test = vectorizer.transform(X_test_raw)"
]
},
{
"cell_type": "code",
"execution_count": 24,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"预测为 ham ,信件为 Wat time ü wan today?\n",
"预测为 ham ,信件为 Hi.:)technical support.providing assistance to us customer through call and email:)\n",
"预测为 ham ,信件为 Are there TA jobs available? Let me know please cos i really need to start working\n",
"预测为 ham ,信件为 Heehee that was so funny tho\n",
"预测为 ham ,信件为 Guess who spent all last night phasing in and out of the fourth dimension\n"
]
}
],
"source": [
"LR = LogisticRegression()\n",
"LR.fit(X_train,y_train)\n",
"predictions = LR.predict(X_test)\n",
"for i,prediction in enumerate(predictions[:5]):\n",
" print(\"预测为 %s ,信件为 %s\" % (prediction,X_test_raw[i]))"
]
},
{
"cell_type": "code",
"execution_count": 25,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1205 0]\n",
" [ 37 151]]\n"
]
},
{
"data": {
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAQsAAAD1CAYAAABHutCPAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMi4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvhp/UCwAAFppJREFUeJzt3X2QXFWZx/HvL0PCS4IYHEBQNAZBxcUARk2UYMISMYooqaisL1vKsvhWKrvruiqx3FULlfWtxAWMFRRdC0FUFDeaiGIZMIiJKIioUZe4gCghMQFUIDPP/nFuM01nevrcSXdu35nfp+pWuk/fufd0Z/qZ57zccxURmJl1MqXqCphZPThYmFkWBwszy+JgYWZZHCzMLIuDhZllcbDoI5IeW2LfuZKOKB4PSvqgpMOK54slfUPS9Kb9Z0r6oqQ9d6F+s4rzDIz3GFZfe1RdAXuYj0v6C3AmcBtwS8vrxwIzI+J+4InAJyW9DlgF/Az4XBEMpgMviIj7mn72ROCB4meRNBP4LfCbpn2mA/8MXAvcBdwEHA0cExE3AX8LPCEihrr4nq0mHCz6SEQsk/QvwBxgG/Dhll0+CTxQ7PtFSbcBfwEeAxwBDAHnAAuAyyR9MiIuLn72lcCzJP2W9P/+r8B9ETG3tR6S9gJ+D7wQ+DLwFEmXAU8AfilpPSBgX+CEiLitW5+BjY+kg4DLI2KBpMcBnwOGgV8DryP9n38F2B9YGREXSZraWjbWORws+oSkZwLLgA9GxBZJAfy1ZbeIiJC0H3BERFxT/Id/CFhHyhQeHRH/JOlgYFZx7KNIweS5wApgcXG8j7Spzo7i3xcDn4+IyyTdAnwceCvwiIj4wa6/68nrpEXT4+4teQnahhvvXx0Rz2/3epElXkzKDCEFhzdExC2SvgkcRcosN0TEv0taJelLwD+2lkXEPe3O42DRPzYApwBXSXo6sB/w/pZ9BotmxmHAJZKuBr4FHA/MA44EbpP0imL/PSV9FvgGcDrpLw0R8SCApAMl/aTYdwZwU0Sc2nS+2cAGSXuQspx3As8uzu9gsQs2bxnih6vzuqimHvybJxfZXMOKiFjR9HwIeDnwNYCIOLvptUcBm4GFwDuKsu8Dc9uUXd2uHg4WfaLoB1gu6aNF9nBSRGwAkDQb2BYRdxe7/1jS04CTIuKrwJclvQ8I4ANNh70pIjZJeh4wnxSAZks6F7gK+GNEHF2c40Tg1S3Vej9wDSnDWUTKSvZPu+t44A8R8ZJufxaTQzAUw7k7bx6tufjQkSK2A0h6WLmklwM3R8QdRWf37cVLW4CDSJlIa1lbHg3pPwcU/34eQNI04O3AfEknNGcNwI3FPsuAs4ErgccW2xsZaW7cBfyI1Gl6O/BdUp/EmCLiXuCXpCD0dFLAeS/whYiY70AxfgEME1nbeBR/YN4GnFUU3QvsXTyeQfruj1bWljOLPiJpBnBl0QwZlHQNsBG4D/g34E5S/wTAS4CTJd0E/B1pNGQpRQco8DjgMoCIuAG4QdKRpL8eN0TEH4pmSHN6u6alPktIqekK4OcRMdT816voLxn26Mj4DJOdWZRS9GFcApweEduK4g3AccDlpA7069qUteVg0V/eRuqVvkfS7yLiOKVv53mkdurni5EKgFNJnVq/IY2SfBF4TWNkQtLD+jskTQFeA9wAfLtoRvxxrPQW2Ic0lDoP+IikHcAgqS/kRGAaKYh9swvvfVIJgqHeLQ/xDtIfi/OK4P4e0u/KKkkLSH1bPyRlma1lbcnrWfQHSYeT+hGOJDUxfkIatjwQ2Ap8PSLWSLoEOB/4OmnkozFv4rukVLI5s3h3Y+hU0odIf0UWABeQhj5fEBEP9bIVmcJUUpZ8S0TMGqWeZwBPjIh3tL5m+Y6ZMy2u/uaYXQQPmfmY2zZ0COpZJB1C+h1Y3cg4Ritrx5lF/5gF/GdE3CdpEamH+wbgUuAM4EJJtwOHkLKISxqBonAg8PyIuK1obpwH/BQe6uh6FfCsiBiWdFax/5FFU6dhCilAfXqMeu5ZbLYLAhgaZ3/EuM8ZcQdF03SssnacWfShoskwtSUY7MrxBBxc/GLUQvMko6rr0gtz5kyL1asGs/Y9+LG/70pmsas8GlKSpJWS1kla3qtzRMRwtwJFcbyoWaBonWQ0IQ1nbv3CwaIESUuBgYiYT5qvcHjVdZqgGpOMtlddkV4JgqHMrV+4z6KchYy079aQOoY2VlabCardJKMJJWCof+JAFmcW5ZSa8WbWTpqUVa9miDOLckrNeDNrTwxRr8zJv+zlNGa8QZrxdmt1VbE6C2A48rZ+4cyinCuAtcVEliWkmY3WIxGxsOo69EoAD9Tsb3W9aluxouNtIWkO/aJOM97MxjIcytr6hTOLkiJiK5kz3szaSTM4+ycQ5HCwMKtAIIZqltjXq7Z9QtKZVddhopsMn3HdmiEOFuMz4X+R+8CE/owbzZCcrV+4GWJWCTEU9fpbXXmwGNx/IGYdOrXqapTyuMfswdw5e/XRCPjYfnXjPlVXobS92IdHaP/afMYA97B1c0Qc0HnPlFk8SL3u1VR5sJh16FSuX31o1dWY0E465OiqqzApXBWXb8rdN8KZhZllGu6j/ogcDhZmFUgdnM4szKwjN0PMLEO6RN3Bwsw6CMQD4dEQM8sw7GaImXXiDk4zyxKIoT667iOHg4VZRdzBaWYdReChUzPLIc/gNLPOAngg6vX1q1ceZDZBBHkL3+QufiPpIElri8dTJV0p6VpJp5cpG4uDhVlFhpiStXUyyr1h3wxsiIjnAMsk7VuirC0HC7MKpPuGTMnagEFJ65u21lXEWu8Nu5CRRaW/D8wtUdZWvRpNZhNGqSXzNkdE2y/yKPeGHe02m7llbTmzMKtAycyirNFus5lb1paDhVlFerhg72i32cwta8vNELMKRIgHh3v29bsYWCVpAXAk8ENScyOnrC1nFmYVSOtZKGvLPmZxb9iI2AQsBq4FToyIodyysY7vzMKsEr1dKSsi7qDlNpu5Ze04WJhVIHVwerq3mWXwehZm1lFjunedOFiYVcTrWZhZRxHw4LCDhZl1kJohDhZmlmGcszMr42BhVgEPnZpZJjdDzCyT1+A0s47S6t4OFmbWQSB2DPtep2aWwc0QM+vIoyFmls2jIWbWWYl7gvQLBwuzCjRWyqoTBwuzijizMLOOAtjhq07NrJM6Ln7Ts9AmaaWkdZKW9+ocZnXW7dW9e60nwULSUmAgIuYDsyUd3ovzmNVW0NW7qO8OvcosFjKyvPgaRu56BICkMxs3eb3r7jFvVWA2ITUmZTlYdLjhakSsiIi5ETH3gEfVa368WbfULVj0qoOz1A1XzSabQAzVbDSkV7UtdcNVs8mobh2cvcosrgDWSjoEWALM69F5zGopon6TsnqSWUTEdlIn53XAoojY1ovzmNVZhLK2ftGzRlNEbI2IyyLizl6dw6y+8jo3c7IPSTMlrSpGGD9VlO00z2lX5z7Vq4fFbALpYmbxauALETEX2FfS22mZ59SNuU+e7m1WgZKL3wxKWt/0fEVErGh6fjfwN5IeCRwKbGPneU7HjFK2sUydHSzMqlBuwd7NRdbQzjXAC4G3ALcA03j4PKdj2Xnu07Flq+xmiFkFgq42Q94DvD4i3gv8AngFO89z2uW5Tw4WZpXoXgcnMBM4StIA8Czgg+w8z2mX5z65GWJWkYiuHeoDwGeAxwPrgI+x8zynGKWsFAcLs4p0aw5FRFwPPLW5TNJCYDFwbmOe02hlZThYmFUgonvBYvTjx1ZGRj/alpXhYGFWkbpN93awMKvI8LCDhZl1EPTXdR85HCzMKtK9wZDdw8HCrAo97uDsBQcLs6rULLVwsDCriDMLM8vSxRmcu4WDhVkFIiBqtmCvg4VZRZxZmFkeBwsz68yTsswslzMLM+vIk7LMLJszCzPL4szCzLLULLMYc1aIpCmSpo/x2st6Uy2zCS5ImUXO1ic6ZRazgGWSfkRaQbiZSHdCGvcyXWaT2USblLUDGALeDawFDgKOB35MuptRzd6uWR+p2benbbCQtAfwfmBf4GDgf4DDgScB1wPXAk/fDXU0m5j6qImRo9OVLGuBB1r2i5Z/zaysAA3nbf2ibWYRETskrQH2Aw4AziPd/uzgYnsF8MfdUUmziae/Oi9zdOqzeBzwk4j4cOsLkqaQmiZmNh41y83H6rPYE3gX8FdJJ4yyyxRG7spsZmVNlGAREfcDSyTNBs4BngacBdxd7CJgz57X0GyimijBoiEifgucJmkZ8LuI+EXvq2U2wTUmZdVI9rpeEXF5RPxC0nMaZUVTxczGQZG39YuOwULSRknrm4rOKcpPBd7Tq4qZTXiRuWWSdL6kFxWPV0paJ2l50+s7lZWRcyHZrRGxuOn5fZIGgHcCLxzPSZtt/NkMljzx2bt6GBvDwFMPrboKk8PPyu3ezaxB0gLg0RFxpaSlwEBEzJd0kaTDgaNayyJiY5lz5DRDQtJTJR0n6cCi7FXA1yLirlLvyMxG5F9INihpfdN2ZvNhJE0FPg3cKunFwEJGrtlaAxzXpqyUsYZOpwLLSNO9nwIsIE3GegbwPeBjZU9mZoVyTYzNETF3jNf/Hvg5cC7wZuBNwMritS3AscB0RqY6NMpKGSuzGAQWAzsi4nJgW0S8DFgPPBJ4S9mTmVmT7vVZHAOsiIg7gf8Gvk+abQ0wg/Q9v3eUslLa/kBE/D4iTidNynomsJekkwFFxLuAk5uaJWZWUhdHQ34NzC4ezyUtLdFoZswBbgU2jFJWSk4HZwC/Aj4LLAcal7asBE4DPlH2pGZGNydlrQQuknQaMJXUP/F1SYcAS4B5xdnWtpSVkpOKPJ509el24H2kFAZgNakvw8xKUhevOo2IeyLipRFxfETMj4hNpIBxHbAoIrZFxPbWsrJ1zpnB+aSHvUnpXEmnR8RFkt5a9oRmVujhDM6I2ErLKnajlZXRaQ3O+UU/RfMJvwG8UtIjgU+N98Rmk16XJ2X1WqfMYgowIOmnwP2ki8eC1DR5LXB1b6tnNnH101TuHJ36LBpvZwtp7Yo/Ad8BbgSOIA3TmNl4TLDM4kXA/7Fz1SMi3tDLiplNaH12kViOtplFsRLWdOCURlHL66PeT8TMMtUssxhrUtYwcClwQaOo6V8BF0oa7G31zCauui3Ymzvl8xGkiRz7AotIq2Z9Cnh9j+plZn2mU5/FADCt9SIWSd+NiGuK1bPMbDz6qImRo1OwuJaWvorCpwEi4qyu18hsMqhhB+eYwSIihtqUX9Kb6phNIhMpWJhZDzlYmFknYoI1Q8ysR6K/hkVzOFiYVcWZhZllcbAwsxzuszCzPA4WZtZRn10klsPBwqwiHg0xsyzuszCzPA4WZtaR+yzMLIcY/XLufuZgYVYVZxZmlsMdnGaWx0OnZtbRRFspy8x6qGbBInd1bzPrMkXelnUs6SBJNxSPV0paJ2l50+s7lZXlYGFWle7eZOjDwN6SlgIDETEfmC3p8NHKxlNdN0PMKlKiz2JQ0vqm5ysiYsVDx5FOAO4D7gQWApcVL60BjgOOGaVsY9n6OliYVaFc1rC59d49DZKmAe8GTgWuIN1y9Pbi5S3AsW3KSnOwMKuA6NpVp+8Azo+IP0kCuBfYu3htBqmrYbSy0txnYVaV7vRZnAi8SdL3gKOBF5GaGQBzgFuBDaOUldazzELSQcDlEbGgV+cwqzPFro+dRsTxDx0vBYxTgLWSDiHdn3geKeS0lpXWk8xC0kzgYlJbycxa5WYVJeJJRCyMiO2kTs7rgEURsW20svFUuVeZxRDwcuBrPTq+We31agZnRGxlZPSjbVlZPQkWRSSj6HDZiaQzgTMB9pKTD5ukajaDs5LRkGKMeAXAfgODNfvIzLrD14aYWWe+faGZZXNmMSIiFvby+GZ15buom1m+Lsyz2J0cLMwq4szCzDrzrQDMLJdHQ8wsi4OFmXUWuIPTzPK4g9PM8jhYmFknnpRlZnki3GdhZnk8GmJmWdwMMbPOAhiuV7RwsDCrSr1ihYOFWVXcDDGzPB4NMbMczizMrCMFyB2cZpbF8yzMLEc3bl+4OzlYmFXBK2WZWR5fG2Jmmeo2GtKTu6ibWYbGlaedtg4k7Sfpm5LWSPqqpGmSVkpaJ2l50347lZXhYGFWhQANRdaW4ZXARyPiecCdwGnAQETMB2ZLOlzS0tayslV2M8SsKvnNkEFJ65ueryhuLp4OE3F+02sHAK8CPl48XwMcBxwDXNZStrFMdR0szCpSYuh0c0TM7Xg8aT4wE7gVuL0o3gIcC0wfpawUN0PMqtKlPgsASfsD5wGnA/cCexcvzSB9z0crK8XBwqwKQZrBmbN1IGka8CXgnRGxCdhAamYAzCFlGqOVleJmiFkFRHRzBuc/kJoVZ0s6G/gM8GpJhwBLgHmk8LS2pawUBwuzqnQpWETEBcAFzWWSvg4sBs6NiG1F2cLWsjIcLMyqEEDesOj4Dh+xlZHRj7ZlZThYmFXEF5KZWR4HCzPrzBeSmVkO30XdzLJ5pSwzy+EOTjPrLICheqUWDhZmlXAHZ2nbh+/evOa+z22quh4lDQKbq65Etp9VXYFxqddnnDy+1N4OFuVExAFV16EsSetzLhm28ZsUn7GDhZl15Luom1megHAH52SwovMuvSdpKjAUkX7rJO1BGr2fHhH3tPmZ2cDW4qIiJO0VEX9tOh4R8eDuqH8HffEZ90wNR0O8+M04NK9/uDtJWiDp25KulHQ7aR2Dr0m6W9IVwBXAs4GrJC2U9CVJn5V0qaRjisOcTlqPseEKSc+VNAt4LXCRpFmSDiuCTyWq+ox3qy6ulLU7OLOokYhYK+lDwPOBiyLiq8CFklZHxEsa+0l6AWktxiHgbNLqz4OS1gA/oJg7KOkw4H5gT+ClwDOKx8tIvxv/BYyaoVgX9FEgyOHMon7+DDwrIr4qaZ6k64FNki6UdKOkecAzI+LXxf4XAo8EHgQeaDnWOcAtwFXAC0gZx5OBk4EftWvKWDdkZhV9FFCcWdSIpFcCZ6aH+h7wLWAVaTHWdcBjgZuBr0hqBIshYPsox3opaS3G/42IYUnTgVcXL7+QlJlYrwQw7D4L651LgIXAn4DrgTuK8kdTTGAqsoFTSAuyCpgK7CgeN7sZOKvp+d7AE4vtwF5U3lo4s7BeaRr1AHgnaZHW2cChwO8YCQgvBo4gBYl9Sf0OjcDRONbPJe3TdPiDgTOKx48Gvt2r92GFPgoEORwsaioihiT9GdgEHE/qqFwnaQrwFlIn5dHAUuAJwKdJmeRxox+RzaTRFIBn9rDqBhBBDA1VXYtS3AypGaW0QgARcTMpc/gO8Pni3zNIIx73AO8F/h34K/B64JekDszGb6mAKZIGgG3ANcX2q+JcA7vjPU1aw5G39QlnFjVS3EzmB8AlxRf5k6SA/0ZgH+BSUnC4jNTv8B8RcZukc0jNjIOAH5P6OyANkw6SOknvKn624Rmk348v9vRNTWY1a4YoalZhGyHpMRFxe9PzfYD7I6Je+e0ktN/AYMyfcUrWvqu3f2ZDP1xU58yixpoDRfH8z1XVxcahZn+oHSzMKhI1m2fhYGFWif6aQ5HDwcKsCgHUbOjUwcKsAgFEHw2L5vA8C7MqRLH4Tc6WQdJKSeskLe9VlR0szCoSw5G1dSJpKTAQEfOB2ZIO70V9Pc/CrAKSvkWaEJdjL9Is3IYVzYsDSfoE8K2IWCXpNGDviPhM92qbuM/CrAIR8fwuHm460Jhzs4V0gWHXuRliVn/3kpYYAJhBj77XDhZm9beBkauJ55DWMuk691mY1ZykRwBrSVcdLwHmRcS2rp/HwcKs/iTNBBYD34+IO3tyDgcLM8vhPgszy+JgYWZZHCzMLIuDhZllcbAwsyz/D2A9WT7bU/OIAAAAAElFTkSuQmCC\n",
"text/plain": [
"<Figure size 288x288 with 2 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# In[2]二元分类分类指标\n",
"from sklearn.metrics import confusion_matrix\n",
"import matplotlib.pyplot as plt\n",
"# predictions 与 y_test\n",
"confusion_matrix = confusion_matrix(y_test,predictions)\n",
"print(confusion_matrix)\n",
"plt.matshow(confusion_matrix)\n",
"plt.title(\"混淆矩阵\")\n",
"plt.colorbar()\n",
"plt.ylabel(\"真实值\")\n",
"plt.xlabel(\"预测值\")\n",
"plt.show()"
]
},
{
"cell_type": "code",
"execution_count": 26,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" ham 0.97 1.00 0.98 1205\n",
" spam 1.00 0.80 0.89 188\n",
"\n",
"avg / total 0.97 0.97 0.97 1393\n",
"\n",
"准确率为: [0.94856459 0.94976077 0.95454545 0.96052632 0.95209581]\n",
"平均准确率为: 0.9530985875139673\n"
]
}
],
"source": [
"# In[3] 给出 precision recall f1-score support\n",
"from sklearn.metrics import classification_report\n",
"print(classification_report(y_test,predictions))\n",
"\n",
"from sklearn.metrics import roc_curve,auc\n",
"# 准确率\n",
"scores = cross_val_score(LR,X_train,y_train,cv=5)\n",
"print(\"准确率为: \",scores)\n",
"print(\"平均准确率为: \",np.mean(scores))\n",
"\n",
"# 必须要将标签转为数值\n",
"from sklearn.preprocessing import LabelEncoder\n",
"class_le = LabelEncoder()\n",
"y_train_n = class_le.fit_transform(y_train)\n",
"y_test_n = class_le.fit_transform(y_test)"
]
},
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"平均精准率为: 0.989738656405323\n",
"平均召回率为: 0.656547619047619\n",
"平均F1值为: 0.7887220439566227\n"
]
}
],
"source": [
"# 精准率\n",
"precision = cross_val_score(LR,X_train,y_train_n,cv=5,scoring='precision')\n",
"print(\"平均精准率为: \",np.mean(precision))\n",
"# 召回率\n",
"recall = cross_val_score(LR,X_train,y_train_n,cv=5,scoring='recall')\n",
"print(\"平均召回率为: \",np.mean(recall)) \n",
"# F1值\n",
"f1 = cross_val_score(LR,X_train,y_train_n,cv=5,scoring='f1')\n",
"print(\"平均F1值为: \",np.mean(f1)) "
]
},
{
"cell_type": "code",
"execution_count": 28,
"metadata": {},
"outputs": [
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# In[4] ROC曲线 y_test_n为数值\n",
"predictions_pro = LR.predict_proba(X_test)\n",
"false_positive_rate, recall, thresholds = roc_curve(y_test_n,predictions_pro[:,1])\n",
"roc_auc = auc(false_positive_rate, recall)\n",
"plt.title(\"受试者操作特征曲线(ROC)\")\n",
"plt.plot(false_positive_rate, recall, 'b', label='AUC = % 0.2f' % roc_auc)\n",
"plt.legend(loc='lower right')\n",
"plt.plot([0,1],[0,1],'r--')\n",
"plt.xlim([0.0, 1.0])\n",
"plt.ylim([0.0, 1.0])\n",
"plt.xlabel('假阳性率')\n",
"plt.ylabel('召回率')\n",
"plt.show() "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.6.5"
}
},
"nbformat": 4,
"nbformat_minor": 2
}
{
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"# logistic回归\n",
"本次作业主要来练习使用逻辑回归对文本数据进行分类。通过完成作业,你将会学到: 1、如何调用逻辑回归进行分类; 2、如何对文本数据进行分类;3、如何评估模型效果。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"```不要单独创建一个文件,所有的都在这里面编写(在TODO后编写),不要试图改已经有的函数名字 (但可以根据需求自己定义新的函数)```"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"logistic回归又称logistic回归分析,是一种广义的线性回归分析模型,常用于数据挖掘,疾病自动诊断,经济预测等领域。例如,探讨引发疾病的危险因素,并根据危险因素预测疾病发生的概率等。以胃癌病情分析为例,选择两组人群,一组是胃癌组,一组是非胃癌组,两组人群必定具有不同的体征与生活方式等。因此因变量就为是否胃癌,值为“是”或“否”,自变量就可以包括很多了,如年龄、性别、饮食习惯、幽门螺杆菌感染等。自变量既可以是连续的,也可以是分类的。然后通过logistic回归分析,可以得到自变量的权重,从而可以大致了解到底哪些因素是胃癌的危险因素。同时根据该权值可以根据危险因素预测一个人患癌症的可能性。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"在本次项目中,你将会用到以下几个工具:\n",
"- ```sklearn```。具体安装请见:http://scikit-learn.org/stable/install.html sklearn包含了各类机器学习算法和数据处理工具,包括本项目需要使用的词袋模型,均可以在sklearn工具包中找得到。 \n",
"- ```pandas```,数据处理库:https://pandas.pydata.org/pandas-docs/stable/\n",
"- ```matplotlib```,绘图库,绘制各种图表,本次作业中将进行各种模型评价指标的可视化展示:www.matplotlib.org"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 1. 文件读取\n",
"将文本数据读入,并探查数据的情况"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"<bound method NDFrame.head of 0 1\n",
"0 ham Go until jurong point crazy.. Available only i...\n",
"1 ham Ok lar... Joking wif u oni...\n",
"2 spam Free entry in 2 a wkly comp to win FA Cup fina...\n",
"3 ham U dun say so early hor... U c already then say...\n",
"4 ham Nah I don't think he goes to usf he lives arou...\n",
"... ... ...\n",
"5567 spam This is the 2nd time we have tried 2 contact u...\n",
"5568 ham Will ü b going to esplanade fr home?\n",
"5569 ham Pity * was in mood for that. So...any other su...\n",
"5570 ham The guy did some bitching but I acted like i'd...\n",
"5571 ham Rofl. Its true to its name\n",
"\n",
"[5572 rows x 2 columns]>\n",
"垃圾邮件个数:747\n",
"正常邮件个数:4825\n"
]
}
],
"source": [
"#导入其他需要的算法库\n",
"import pandas as pd\n",
"#读取垃圾邮件数据,并统计垃圾邮件和正常邮件的数量\n",
"## TODO: 利用pandas库pd中read_csv()函数写出读取垃圾邮件数据csv文件的代码\n",
"smsDir = './SMSSpamCollection.csv' \n",
"df = pd.read_csv(smsDir,names = [0,1])\n",
"\n",
"#数据探查\n",
"print(df.head)\n",
"print(\"垃圾邮件个数:%s\" % df[df[0]=='spam'][0].count())\n",
"print(\"正常邮件个数:%s\" % df[df[0]=='ham'][0].count())"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 2. 准备训练数据\n",
"将数据分为训练数据、测试数据、训练标签、测试标签,并将文本转化数值特征。\n",
"本次使用的数据是对垃圾邮件分类:数据有两列,第一列是标签(ham为非垃圾邮件、spam为垃圾邮件),待分类的邮件为英文文本。"
]
},
{
"cell_type": "code",
"execution_count": 51,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(3900,)\n",
"(1672,)\n",
"(3900,)\n",
"(1672,)\n"
]
}
],
"source": [
"#导入sklearn算法库中训练测试数据分割算法train_test_split,以及计算准确率等的算法cross_val_score\n",
"from sklearn.model_selection import train_test_split,cross_val_score\n",
"\n",
"# 对原始csv中的数据进行类型转换\n",
"X = df[1].values.astype('U')\n",
"y = df[0].values.astype('U')\n",
"## TODO: 利用train_test_split()函数对数据进行拆分,分出训练数据和测试数据\n",
"X_train_raw,X_test_raw,y_train,y_test = train_test_split(X, y,test_size=0.3)\n",
"print(X_train_raw.shape)\n",
"print(X_test_raw.shape)\n",
"print(y_train.shape)\n",
"print(y_test.shape) "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"TF-IDF(term frequency–inverse document frequency)是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。TF-IDF加权的各种形式常被搜索引擎应用,作为文件与用户查询之间相关程度的度量或评级。除了TF-IDF以外,因特网上的搜索引擎还会使用基于链接分析的评级方法,以确定文件在搜寻结果中出现的顺序。详细资料可参考百度百科:https://baike.baidu.com/item/tf-idf/8816134?fr=aladdin"
]
},
{
"cell_type": "code",
"execution_count": 52,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"(3900, 7236)\n",
"(1672, 7236)\n"
]
}
],
"source": [
"#导入sklearn算法库中文本特征提取的TFIDF算法\n",
"from sklearn.feature_extraction.text import TfidfVectorizer\n",
"\n",
"# 文本是无法直接用模型进行计算的,需要对文本数值化\n",
"## TODO: 利用sklearn.feature_extraction.text的TfidfVectorizer模块对文本进行TFIDF特征转换\n",
"vectorizer = TfidfVectorizer()\n",
"X_train = vectorizer.fit_transform(X_train_raw)\n",
"X_test = vectorizer.transform(X_test_raw) #为什么要用transform而不用fit_trainsform?\n",
"# arr1 = X_train.toarray() #\n",
"# arr2 = X_test.toarray()\n",
"print(X_train.shape)\n",
"print(X_test.shape)\n"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 3. 训练模型"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"logistic回归是一种广义线性回归(generalized linear model),因此与多重线性回归分析有很多相同之处。它们的模型形式基本上相同,都具有 w‘x+b,其中w和b是待求参数,其区别在于他们的因变量不同,多重线性回归直接将w‘x+b作为因变量,即y =w‘x+b,而logistic回归则通过函数L将w‘x+b对应一个隐状态p,p =L(w‘x+b),然后根据p 与1-p的大小决定因变量的值。如果L是logistic函数,就是logistic回归,如果L是多项式函数就是多项式回归。\n",
"logistic回归的因变量可以是二分类的,也可以是多分类的,但是二分类的更为常用,也更加容易解释,多类可以使用softmax方法进行处理。实际中最为常用的就是二分类的logistic回归。"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"对X_train、y_train进行训练,对X_test、y_test进行测试。"
]
},
{
"cell_type": "code",
"execution_count": 59,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[ 0.38526741 0.08232807 0.09233934 ... -0.01256525 -0.02803296\n",
" -0.01044055]]\n",
"预测为 ham ,信件为 Only once then after ill obey all yours.\n",
"预测为 ham ,信件为 What???? Hello wats talks email address?\n",
"预测为 ham ,信件为 Got but got 2 colours lor. One colour is quite light n e other is darker lor. Actually i'm done she's styling my hair now.\n",
"预测为 ham ,信件为 Say this slowly.? GODI LOVE YOU &amp; I NEED YOUCLEAN MY HEART WITH YOUR BLOOD.Send this to Ten special people &amp; u c miracle tomorrow do itplspls do it...\n",
"预测为 ham ,信件为 If u dun drive then how i go 2 sch.\n"
]
},
{
"name": "stderr",
"output_type": "stream",
"text": [
"D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\linear_model\\logistic.py:432: FutureWarning: Default solver will be changed to 'lbfgs' in 0.22. Specify a solver to silence this warning.\n",
" FutureWarning)\n"
]
}
],
"source": [
"#导入sklearn算法库logistic回归的算法\n",
"from sklearn.linear_model.logistic import LogisticRegression\n",
"\n",
"LR = LogisticRegression()\n",
"## TODO:写出LogisticRegression函数训练的代码,使用LR.fit()函数,第一个参数是训练的特征数据,第二个参数是训练的标签数据\n",
"LR.fit(X_train,y_train)\n",
"print(LR.coef_)\n",
"train_score = LR.score(X_train,y_train) #采用sklearn的score函数打印准确率得分\n",
"# ## TODO:写出LogisticRegression函数预测的代码,使用LR.predict()函数,参数是待遇测的特征数据\n",
"predictions = LR.predict(X_test)\n",
"#打印出预测的结果\n",
"for i,prediction in enumerate(predictions[:5]):\n",
" print(\"预测为 %s ,信件为 %s\" % (prediction,X_test_raw[i]))"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## 4. 评估模型\n",
"训练完模型,需要利用二分类分类指标,以及ROC曲线衡量模型性能。"
]
},
{
"cell_type": "code",
"execution_count": 77,
"metadata": {},
"outputs": [],
"source": [
"#导入绘图需要的matplotlib库\n",
"import matplotlib\n",
"matplotlib.rcParams['font.sans-serif']=[u'simHei']\n",
"matplotlib.rcParams['axes.unicode_minus']=False"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.1 混淆矩阵"
]
},
{
"cell_type": "code",
"execution_count": 78,
"metadata": {
"scrolled": true
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"[[1421 1]\n",
" [ 61 189]]\n"
]
},
{
"data": {
"image/png": "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\n",
"text/plain": [
"<Figure size 288x288 with 2 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"# 二元分类分类指标\n",
"from sklearn.metrics import confusion_matrix\n",
"import matplotlib.pyplot as plt\n",
"# 计算predictions 与 y_test的混淆矩阵\n",
"## TODO: 利用confusion_matrix模块计算混淆矩阵,并使用matplot展示\n",
"confusion_matrix = confusion_matrix(y_test,predictions)\n",
"print(confusion_matrix)\n",
"plt.matshow(confusion_matrix)\n",
"#添加图示\n",
"plt.title(\"混淆矩阵\")\n",
"plt.colorbar()\n",
"plt.ylabel(\"真实值\")\n",
"plt.xlabel(\"预测值\")\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"混合矩阵\n",
"横坐标为预测值\n",
"纵坐标为真实值\n",
"这样可以分为四个象限\n",
"\n",
"前面一个正负为真实值,后面的为预测值\n",
"正正(TP/00) 正负(FN 01)\n",
"负正(FP/10) 负负(TN/11)\n",
"\n",
"精准率可以解释为,预测为正例的样本中,有多少是真的正例\n",
"\n",
"召回率可以解释为,真实的正例的样本中,有多少被预测出来"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.2 precision、recall、f1-score"
]
},
{
"cell_type": "code",
"execution_count": 79,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
" precision recall f1-score support\n",
"\n",
" ham 0.96 1.00 0.98 1422\n",
" spam 0.99 0.76 0.86 250\n",
"\n",
" accuracy 0.96 1672\n",
" macro avg 0.98 0.88 0.92 1672\n",
"weighted avg 0.96 0.96 0.96 1672\n",
"\n"
]
}
],
"source": [
"# 自动计算precision、recall、f1-score指标\n",
"from sklearn.metrics import classification_report\n",
"print(classification_report(y_test,predictions))"
]
},
{
"cell_type": "code",
"execution_count": 84,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"平均精准率为: 0.9588394062078273\n",
"平均召回率为: 0.9992967651195499\n",
"平均F1值为: 0.9786501377410469\n"
]
}
],
"source": [
"## TODO:手动计算precision、recall、f1-score指标\n",
"# 精准率\n",
"precision = confusion_matrix[0,0]/(confusion_matrix[0,0]+confusion_matrix[1,0])\n",
"print(\"平均精准率为: \",precision)\n",
"# 召回率\n",
"recall = confusion_matrix[0,0]/(confusion_matrix[0,0]+confusion_matrix[0,1])\n",
"print(\"平均召回率为: \",recall) \n",
"# F1值 1/F1 = 1/2(1/precision+1/recall)\n",
"f1 = 2/(1/precision+1/recall)\n",
"print(\"平均F1值为: \",f1)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### 4.3 绘制ROC曲线"
]
},
{
"cell_type": "code",
"execution_count": 103,
"metadata": {},
"outputs": [
{
"name": "stderr",
"output_type": "stream",
"text": [
"D:\\ProgramData\\Anaconda3\\lib\\site-packages\\sklearn\\metrics\\ranking.py:659: UndefinedMetricWarning: No positive samples in y_true, true positive value should be meaningless\n",
" UndefinedMetricWarning)\n"
]
},
{
"data": {
"image/png": "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cpISQ82q6eOpngOEq7HNmhW2DzkkDCVNmaLEICK1lpLDp5+G0hf7719SKK93bxXKE8lxS5YsoWnTpr8NxfTr148pU6YAcNVVV/HQQw+xatUq+vfvT4cOHejbty+rV69OMuS0qr3JYeVKGDIE9twTZsyAf/9bhfJEapHx48dTWFjIpEmTym3z+OOPU1RUxOTJk2nRogWjyrlQV8+ePenUqdNvP8OGDYsr7LSpnXMOy5dDx45QUABHHQV33glbbpl0VCK10vnnl1ShqSlt2oTvexUZM2YMZ599NmPGjOHggw8us83YsWM5/PDDATjuuOP4+eefy2w3evToasfar18/dtxxR8aPH8+qVauYMGECS5cupXfv3pgZHTt25J///GeZ7Ro2bFjt161M7eo5pBbK69wZRo4MZyQpMYjUOlOnTmXQoEFMmDCh3DYLFixgk002AWDvvfemQ4cOscSybNkyJk+eTMuWLXn33XeZN28e119/PS+99BLPPfdcue3iVHt6DlOnwoABcP/9oWDekCFJRyQiVP4NPw4zZ85k0aJF9OrVizlz5vDNN9+sdbaPmbHhhhuybNkyAEaNGsWyZcs48cQT19pfz549+SGlztrxxx9P//79qxxP3759Adh2221ZsWIFDRs25Oqrr6ZJkyb89NNP5baLU+73HH7+OfRbDzwQli6FlAMtIrXT2LFjufTSS5k4cSLnnnsuY8eOZfPNN+eLL74A4IsvvqBFixYceOCBjB8/HghzFBtvvHGZ+xs9ejQTJ0787WddEgNA48aN17g9dOhQLrnkEoYPH75G0irdLk65nRwmTAjXbb71VjjrrFAor2PHpKMSkYSNHTuWLl26ANClSxfGjBnDgAEDuOeee+jQoQOFhYV07tyZ/v37s2TJEtq3b8+PP/5I9+7d0xJfjx49GDBgAEceeSSNGjVi3rx5aXndVLldW+mqq8IFeIYPh5jGCkVk3X300UfsuuuuSYeRc8o6rtWtrZR7PYdRo2DcuLB96aXhNAglBhGRdZI7yWHBgrB47eij4fbbw33164czk0Qk42TLqEW2qOnjmf3JwR0efBB23TWU177uunB6qohkrLy8PBYvXqwEUUOKq7Lm5eXV2D6z/1TWMWOgb99w2c4RI6Bly6QjEpFKbL311sydO5eFCxcmHUrOKL6eQ03JzuRQXCivVSs49FB48skw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\n",
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"from sklearn.metrics import roc_curve,auc\n",
"## 绘制ROC曲线\n",
"# 利用逻辑回归的predict_proba函数输出预测概率\n",
"predictions_pro = LR.predict_proba(X_test)\n",
"\n",
"#自行添加的\n",
"# 有时必须要将标签转为数值\n",
"from sklearn.preprocessing import LabelEncoder\n",
"class_le = LabelEncoder()\n",
"y_train_n = class_le.fit_transform(y_train)\n",
"y_test_n = class_le.fit_transform(y_test)\n",
"\n",
"\n",
"# 利用roc_curve函数生成如下指标\n",
"false_positive_rate, recall, thresholds = roc_curve(y_test_n, predictions_pro[:,1], pos_label=2)\n",
"\n",
"roc_auc = auc(false_positive_rate, recall)\n",
"plt.title(\"受试者操作特征曲线(ROC)\")\n",
"plt.plot(false_positive_rate, recall, 'b', label='AUC = % 0.2f' % roc_auc)\n",
"plt.legend(loc='lower right')\n",
"plt.plot([0,1],[0,1],'r--')\n",
"plt.xlim([0.0, 1.0])\n",
"plt.ylim([0.0, 1.0])\n",
"plt.xlabel('假阳性率')\n",
"plt.ylabel('召回率')\n",
"plt.show() "
]
},
{
"cell_type": "code",
"execution_count": 73,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([[1421, 1],\n",
" [ 61, 189]], dtype=int64)"
]
},
"execution_count": 73,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"confusion_matrix\n"
]
},
{
"cell_type": "code",
"execution_count": 83,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"61"
]
},
"execution_count": 83,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"confusion_matrix[1,0]"
]
},
{
"cell_type": "code",
"execution_count": 93,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"(1672,)"
]
},
"execution_count": 93,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predictions_pro[:,1].shape"
]
},
{
"cell_type": "code",
"execution_count": 99,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0.0618445 , 0.0518017 , 0.02134218, ..., 0.66665959, 0.02274288,\n",
" 0.0682999 ])"
]
},
"execution_count": 99,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"predictions_pro[:,1]"
]
},
{
"cell_type": "code",
"execution_count": 105,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([0, 1, 1, ..., 0, 0, 0], dtype=int64)"
]
},
"execution_count": 105,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"y_train_n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"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.7.4"
},
"toc": {
"base_numbering": 1,
"nav_menu": {},
"number_sections": false,
"sideBar": true,
"skip_h1_title": false,
"title_cell": "Table of Contents",
"title_sidebar": "Contents",
"toc_cell": false,
"toc_position": {},
"toc_section_display": true,
"toc_window_display": true
},
"varInspector": {
"cols": {
"lenName": 16,
"lenType": 16,
"lenVar": 40
},
"kernels_config": {
"python": {
"delete_cmd_postfix": "",
"delete_cmd_prefix": "del ",
"library": "var_list.py",
"varRefreshCmd": "print(var_dic_list())"
},
"r": {
"delete_cmd_postfix": ") ",
"delete_cmd_prefix": "rm(",
"library": "var_list.r",
"varRefreshCmd": "cat(var_dic_list()) "
}
},
"types_to_exclude": [
"module",
"function",
"builtin_function_or_method",
"instance",
"_Feature"
],
"window_display": true
}
},
"nbformat": 4,
"nbformat_minor": 2
}
This source diff could not be displayed because it is too large. You can view the blob instead.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment