赞
踩
本次案例采用SVM、MNB模型进行对比
用Accuracy、F1 Score进行评估
话不多说直接上代码包括数据集下载
CSDNhttps://mp.csdn.net/mp_download/manage/download/UpDetailed
- # 读取数据并用空字符串替换空值
- df1 = pd.read_csv("spamham.csv")
- df = df1.where((pd.notnull(df1)), '')
-
- # 将垃圾邮件分类为 0,将非垃圾邮件分类为 1
- df.loc[df["Category"] == 'ham', "Category",] = 1
- df.loc[df["Category"] == 'spam', "Category",] = 0
- # 将数据拆分为标签和文本。系统应该能够根据文本预测标签
- df_x = df['Message']
- df_y = df['Category']
- # 拆分表格 - 80% 用于训练,20% 用于测试大小
- x_train, x_test, y_train, y_test = train_test_split(df_x, df_y, train_size=0.8, test_size=0.2, random_state=4)
-
- # 使用 Tfidf 矢量化器 进行特征提取、小写转换和停用词去除
- tfvec = TfidfVectorizer(min_df=1, stop_words='english', lowercase=True)
- x_trainFeat = tfvec.fit_transform(x_train)
- x_testFeat = tfvec.transform(x_test)
-
- # SVM 用于建模
- y_trainSvm = y_train.astype('int')
- classifierModel = LinearSVC()
- classifierModel.fit(x_trainFeat, y_trainSvm)
- predResult = classifierModel.predict(x_testFeat)
-
- # GNB 用于建模
- y_trainGnb = y_train.astype('int')
- classifierModel2 = MultinomialNB()
- classifierModel2.fit(x_trainFeat, y_trainGnb)
- predResult2 = classifierModel2.predict(x_testFeat)
-
- # 计算精度,转换为 int - 解决 - 无法处理未知和二进制的混合
- y_test = y_test.astype('int')
- #actual_Y = y_test.as_matrix()
-
- print("~~~~~~~~~~SVM RESULTS~~~~~~~~~~")
- #使用 SVM 的准确度得分
- print("Accuracy Score : {0:.4f}".format(accuracy_score(y_test, predResult)*100))
- #使用 SVM 的 FScore
- print("F Score: {0: .4f}".format(f1_score(y_test, predResult, average='macro')*100))
- cmSVM=confusion_matrix(y_test, predResult)
- #“[真阴性假阳性\假阴性真阳性]”
- print("Confusion matrix:")
- print(cmSVM)
-
-
- print("~~~~~~~~~~MNB RESULTS~~~~~~~~~~")
- #使用 MNB 的准确度得分
- print("Accuracy Score: {0:.4f}".format(accuracy_score(y_test, predResult2)*100))
- #使用 MNB 的 FScore
- print("F Score:{0: .4f}".format(f1_score(y_test, predResult2, average='macro')*100))
- cmMNb=confusion_matrix(y_test, predResult2)
- #“[真阴性假阳性\假阴性真阳性]”
- print("Confusion matrix:")
- print(cmMNb)
运行结果:
标称型:标称型目标变量的结果只在有限目标集中取值,如真与假(标称型目标变量主要用于分类)
数值型:数值型目标变量则可以从无限的数值集合中取值,如0.100,42.001等 (数值型目标变量主要用于回归分析)
- 优点:在数据较少的情况下仍然有效,可以处理多类别问题。
- 缺点:对于输入数据的准备方式较为敏感。
- 适用数据类型:标称型数据
-
- 一般流程:
- (1) 收集数据:可以使用任何方法。
- (2) 准备数据:需要数值型或者布尔型数据。
- (3) 分析数据:有大量特征时,绘制特征作用不大,此时使用直方图效果更好。
- (4) 训练算法:计算不同的独立特征的条件概率。
- (5) 测试算法:计算错误率。
- (6) 使用算法:一个常见的朴素贝叶斯应用是文档分类。可以在任意的分类场景中使用朴
- 素贝叶斯分类器,不一定非要是文本。
- 优点:泛化错误率低,计算开销不大,结果易解释。
- 缺点:对参数调节和核函数的选择敏感,原始分类器不加修改仅适用于处理二类问题。
- 适用数据类型:数值型和标称型数据。
-
- 一般流程:
- (1) 收集数据:可以使用任意方法。
- (2) 准备数据:需要数值型数据。
- (3) 分析数据:有助于可视化分隔超平面。
- (4) 训练算法:SVM的大部分时间都源自训练,该过程主要实现两个参数的调优。
- (5) 测试算法:十分简单的计算过程就可以实现。
- (6) 使用算法:几乎所有分类问题都可以使用SVM,值得一提的是,SVM本身是一个二类
- 分类器,对多类问题应用SVM需要对代码做一些修改。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。