20News数据集:包含了20种不同类型新闻的文档组合。下载地址:http://qwone.com/~jason/20Newsgroups/
(虽然才15M但是下了N久,最后发现不用下载anaconda还要在自动下一遍)
首先import进来数据集,并使用subset='test'或'train'从数据集里得到训练集和测试集。
导入Tfidfvectorizer用来对数据集和测试集进行向量空间模型处理
train使用vectorizer.fit_transform得到转化后的训练集
test使用vectorizer.transform到转化后的测试集(如果用vectorizer.fit_transform 在预测时会报错)
X_train即转化后的训练集,Y_train为转化前的训练集.target。test同理。
然后就是熟悉的把Xtrain、Ytrain放入某个model里fit一下,再把Xtest放入model里predict一下然后得到预测的y。
同时把xtest和实际ytest(target)放入model里score一下进行模型的评估。
文章图片
贴上直接调用的代码,为了精确一些没有随机取维等降低时间。
# -*- coding: utf-8 -*-
"""
Created on Wed Jan2 14:22:28 2019@author: 71405
"""from sklearn.datasets import fetch_20newsgroups as news
from sklearn.feature_extraction.text import TfidfVectorizer
def naive_bayes_classifier(train_x, train_y):#朴素贝叶斯
from sklearn.naive_bayes import MultinomialNB
model = MultinomialNB(alpha=0.01)
model.fit(train_x, train_y)
return modeldef knn_classifier(train_x, train_y):#knn
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier()
model.fit(train_x, train_y)
return modeldef logistic_regression_classifier(train_x, train_y):#逻辑回归树
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(penalty='l2')
model.fit(train_x, train_y)
return modeldef random_forest_classifier(train_x, train_y):#随机森林
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=8)
model.fit(train_x, train_y)
return modeldef decision_tree_classifier(train_x, train_y):#决策树
from sklearn import tree
model = tree.DecisionTreeClassifier()
model.fit(train_x, train_y)return model
def svm_classifier(train_x, train_y):#svm
from sklearn.svm import SVC
model = SVC(kernel='rbf', probability=True)
model.fit(train_x, train_y)
return modeltrain=news(subset='train')
test=news(subset='test')vectorizer = TfidfVectorizer() #词频逆文本频率,把一段话转化为向量
train_v=vectorizer.fit_transform(train.data)
test_v=vectorizer.transform(test.data)
model=svm_classifier(train_v,train.target) #多次调用不同函数获取结果
y_predict=model.predict(test_v)
s=model.score(test_v,test.target)
最后更换模型评估如下:
分类算法 | R^2 |
KNN | 0.659 |
SVM | --- |
朴素贝叶斯 | 0.835 |
逻辑回归 | 0.825 |
随机森林 | 0.530 |
决策树 | 0.550 |
推荐阅读
- Application|linux应用编程笔记(5)系统调用文件编程方法实现文件复制
- Java|快到35岁了,担心失业(这篇文章告诉你什么才是中年危机)
- Linux|fcntl即F_SETFL,F_GETFL的使用,设置文件的flags
- Linux|关于getsockname函数的使用
- android x86虚拟机 网络正确配置
- 工具|Spring特点中关于DI,IOC及AOP的个人理解
- c#用法技巧|c# winform 通过编程取消事件(event)的注册
- C|va_list 原理以及用法
- linux|MongoDB 内存解析 Python
- 剑指offer|牛客网_剑指Offer_Python实现_更新中