model_SVC = LinearSVC() clf = CalibratedClassifierCV(model_SVC) clf.fit(train_vec,train_y) # 把文档转换成矩阵 valid_vec = model_tfidf.transform(valid_X) pre_valid = clf.predict_proba(valid_vec) print(pre_valid[:5]) pre_valid = clf.predict(valid_vec) print('正例:',sum(pre_valid == 1)) print('负例:',sum(pre_valid == 0)) from sklearn.metrics import confusion_matrix from sklearn.metrics import accuracy_score cm = confusion_matrix(valid_y, pre_valid) print("混淆矩阵:") print(cm) score = accuracy_score(pre_valid,valid_y) print("准确率:",score)这是上面代码的后续,详细解释一下正例负例怎么来的,1跟0分别代表着什么
时间: 2024-01-24 11:18:11 浏览: 202
在这段代码中,我们使用了支持向量机(SVM)模型进行文本分类。首先,我们定义了一个线性SVM模型,并对其进行了校准(使用CalibratedClassifierCV),以得到更准确的概率预测结果。
接下来,我们使用训练好的TF-IDF向量化器将验证集的文档转换成矩阵(valid_vec),并使用训练好的SVM模型对其进行预测(pre_valid)。预测结果是一个概率值,表示文档属于正类或负类的概率。pre_valid[:5] 表示输出前五个文档属于正类和负类的概率值。
pre_valid = clf.predict(valid_vec) 表示将概率值转换为预测的标签值。在这里,我们假设当概率值大于0.5时,为正类(1),否则为负类(0)。
sum(pre_valid == 1) 和 sum(pre_valid == 0) 分别表示预测结果中正类和负类的文档数量。
混淆矩阵(confusion matrix)是评估分类模型性能的一种常用方法。它是一个二维表格,横轴表示预测结果,纵轴表示真实标签。在这个例子中,我们使用sklearn.metrics中的confusion_matrix函数计算混淆矩阵。
准确率(accuracy)是分类模型性能的另一个指标,它表示模型正确分类的文档占总文档数的比例。在这里,我们使用sklearn.metrics中的accuracy_score函数计算准确率。
相关问题
import pandas as pd data = pd.read_csv(C:\Users\Administrator\Desktop\pythonsjwj\weibo_senti_100k.csv') data = data.dropna(); data.shape data.head() import jieba data['data_cut'] = data['review'].apply(lambda x: list(jieba.cut(x))) data.head() with open('stopword.txt','r',encoding = 'utf-8') as f: stop = f.readlines() import re stop = [re.sub(' |\n|\ufeff','',r) for r in stop] data['data_after'] = [[i for i in s if i not in stop] for s in data['data_cut']] data.head() w = [] for i in data['data_after']: w.extend(i) num_data = pd.DataFrame(pd.Series(w).value_counts()) num_data['id'] = list(range(1,len(num_data)+1)) a = lambda x:list(num_data['id'][x]) data['vec'] = data['data_after'].apply(a) data.head() from wordcloud import WordCloud import matplotlib.pyplot as plt num_words = [''.join(i) for i in data['data_after']] num_words = ''.join(num_words) num_words= re.sub(' ','',num_words) num = pd.Series(jieba.lcut(num_words)).value_counts() wc_pic = WordCloud(background_color='white',font_path=r'C:\Windows\Fonts\simhei.ttf').fit_words(num) plt.figure(figsize=(10,10)) plt.imshow(wc_pic) plt.axis('off') plt.show() from sklearn.model_selection import train_test_split from keras.preprocessing import sequence maxlen = 128 vec_data = list(sequence.pad_sequences(data['vec'],maxlen=maxlen)) x,xt,y,yt = train_test_split(vec_data,data['label'],test_size = 0.2,random_state = 123) import numpy as np x = np.array(list(x)) y = np.array(list(y)) xt = np.array(list(xt)) yt = np.array(list(yt)) x=x[:2000,:] y=y[:2000] xt=xt[:500,:] yt=yt[:500] from sklearn.svm import SVC clf = SVC(C=1, kernel = 'linear') clf.fit(x,y) from sklearn.metrics import classification_report test_pre = clf.predict(xt) report = classification_report(yt,test_pre) print(report) from keras.optimizers import SGD, RMSprop, Adagrad from keras.utils import np_utils from keras.models import Sequential from keras.layers.core import Dense, Dropout, Activation from keras.layers.embeddings import Embedding from keras.layers.recurrent import LSTM, GRU model = Sequential() model.add(Embedding(len(num_data['id'])+1,256)) model.add(Dense(32, activation='sigmoid', input_dim=100)) model.add(LSTM(128)) model.add(Dense(1)) model.add(Activation('sigmoid')) model.summary() import matplotlib.pyplot as plt import matplotlib.image as mpimg from keras.utils import plot_model plot_model(model,to_file='Lstm2.png',show_shapes=True) ls = mpimg.imread('Lstm2.png') plt.imshow(ls) plt.axis('off') plt.show() model.compile(loss='binary_crossentropy',optimizer='Adam',metrics=["accuracy"]) model.fit(x,y,validation_data=(x,y),epochs=15)
这段代码的作用是:
1. 读取一个csv文件(weibo_senti_100k.csv),并将其中的空值删除。
2. 对csv文件中的review列进行分词处理,并过滤掉停用词。
3. 用词频统计生成词云图。
4. 将数据集划分为训练集和测试集,分别使用SVM和LSTM模型进行分类预测,并输出分类报告。
具体流程如下:
1. 首先,使用pandas读取csv文件,并将其中的空值删除。
2. 然后,使用jieba对csv文件中的review列进行分词处理,并过滤掉停用词,得到分词后的结果。
3. 用词频统计生成词云图,可以通过WordCloud库实现。
4. 将分词后的结果转换成向量,并将数据集划分为训练集和测试集。使用SVM和LSTM模型进行分类预测,并输出分类报告。
其中,使用SVM模型的代码如下:
```
from sklearn.model_selection import train_test_split
from sklearn.svm import SVC
from sklearn.metrics import classification_report
# 将数据集划分为训练集和测试集
x, xt, y, yt = train_test_split(vec_data, data['label'], test_size=0.2, random_state=123)
# 训练SVM模型
clf = SVC(C=1, kernel='linear')
clf.fit(x, y)
# 使用测试集进行预测
test_pre = clf.predict(xt)
# 输出分类报告
report = classification_report(yt, test_pre)
print(report)
```
使用LSTM模型的代码如下:
```
from keras.optimizers import Adam
from keras.utils import np_utils
from keras.models import Sequential
from keras.layers.core import Dense, Dropout, Activation
from keras.layers.embeddings import Embedding
from keras.layers.recurrent import LSTM
# 将数据集划分为训练集和测试集
x, xt, y, yt = train_test_split(vec_data, data['label'], test_size=0.2, random_state=123)
# 将标签进行one-hot编码
y = np_utils.to_categorical(y, 2)
yt = np_utils.to_categorical(yt, 2)
# 构建LSTM模型
model = Sequential()
model.add(Embedding(len(num_data['id'])+1, 256))
model.add(LSTM(128))
model.add(Dense(1))
model.add(Activation('sigmoid'))
# 编译LSTM模型
model.compile(loss='binary_crossentropy', optimizer='Adam', metrics=["accuracy"])
# 训练LSTM模型
model.fit(x, y, validation_data=(xt, yt), epochs=15)
```
最后,需要注意的是,代码中有一些缺失的部分,比如数据集的读取和停用词的来源等,需要根据实际情况进行补充。
基于word2vec的文本分类 代码
基于word2vec的文本分类代码如下所示:
```python
import numpy as np
from gensim.models import Word2Vec
from sklearn.svm import SVC
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
# 1. 加载训练好的word2vec模型
model = Word2Vec.load("word2vec_model.model")
# 2. 准备训练数据和标签
sentences = [["I", "love", "this", "movie"],
["This", "is", "an", "awesome", "film"],
["Great", "acting", "in", "this", "movie"],
["The", "plot", "is", "exciting"],
["Bad", "acting", "ruined", "the", "film"]]
labels = [1, 1, 1, 1, 0]
# 3. 将每个句子的词向量进行平均,得到句子的向量表示
sentence_vectors = []
for sentence in sentences:
vectors = []
for word in sentence:
if word in model.wv:
vectors.append(model.wv[word])
if vectors:
sentence_vector = np.mean(vectors, axis=0)
sentence_vectors.append(sentence_vector)
# 4. 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(sentence_vectors, labels, test_size=0.2, random_state=42)
# 5. 训练SVM分类器
clf = SVC()
clf.fit(X_train, y_train)
# 6. 预测并计算准确率
y_pred = clf.predict(X_test)
accuracy = accuracy_score(y_test, y_pred)
print("Accuracy:", accuracy)
```
阅读全文