1.对前几部得到的特征进行分类,主要用到sklearn中的Logistic Regression 和 SVM,这两种算法的具体算法这里不再详述了
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.cross_validation import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn import svm
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.metrics import f1_score
"""读取数据"""
print("data read begin...")
train_data = pd.read_csv('./new_data/train_set.csv')
test_data = pd.read_csv('./new_data/test_set.csv')
train_data.drop(columns=['article','id'], inplace = True)
test_data.drop(columns=['article'], inplace = True)
print("data read end...")
"""提取特征"""
vectorizer = CountVectorizer(ngram_range=(1, 2), min_df = 3, max_df = 0.9, max_features = 100000)
vectorizer.fit(train_data['word_seg'])
print("training begin...")
X_train = vectorizer.transform(train_data['word_seg'])
X_test = vectorizer.transform(test_data['word_seg'])
Y_train = train_data['class']-1
x_train, x_test, y_train, y_test = train_test_split(X_train, Y_train, test_size=0.25, random_state=33)
"""训练和验证"""
#logisticRegression
lg = LogisticRegression(C = 4.0, dual = False)
lg.fit(x_train, y_train)#训练分类器
y_predict = lg.predict(x_test)
acc_train = float((y_predict==y_test).sum())/(len(y_test))#验证集错误率
print("accuracy of LR:",acc_train)
print(f1_score(y_test, y_predict , average='weighted'))
#svm
clf = svm.SVC(C=0.6, kernel='rbf', gamma=20, decision_function_shape='ovr')
clf.fit(x_train, y_train)
y_sv = clf.predict(x_test)
ac = float((y_sv == y_test).sum())/(len(y_test))
print("accuracy of SVM:", ac)
print(f1_score(y_test, y_sv , average='weighted'))
最后得到的结果:
(1)Logistic Regression:
(2)SVM: