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 Jan 2 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 model
def knn_classifier(train_x, train_y): #knn
from sklearn.neighbors import KNeighborsClassifier
model = KNeighborsClassifier()
model.fit(train_x, train_y)
return model
def logistic_regression_classifier(train_x, train_y): #逻辑回归树
from sklearn.linear_model import LogisticRegression
model = LogisticRegression(penalty='l2')
model.fit(train_x, train_y)
return model
def random_forest_classifier(train_x, train_y): #随机森林
from sklearn.ensemble import RandomForestClassifier
model = RandomForestClassifier(n_estimators=8)
model.fit(train_x, train_y)
return model
def 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 model
train=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 |
SVM运行了好久都没跑出来---