一、資料獲取
二、資料匯入與探索
全文運用python作為資料處理、**的工具。首先利用pandas庫匯入資料並觀察一下前五行資料來看一下資料的大致情況:
import pandas as pddata=pd.read_csv(r'c:\users\zhousiying\desktop\weibo_senti_100k\weibo_senti_100k\weibo_senti_100k.csv')data.head()
所得到的結果如下:
然後看一下資料是否存在空值:
data.isnull().sum()
所得結果如下:
label 0 review 0 dtype: int64
結果表示資料集中不存在空值,因此不需要對空值進行處理。
import matplotlib.pyplot as pltfig = plt.figure()data.groupby('label').review.count().plot.bar(ylim=0)plt.show()
所得結果如下:
三、資料預處理
import jiebadata['review'] = data['review'].map(lambda x: ' '.join(jieba.cut(x)))
然後用sklearn中的tfidfvectorizer函式對文字進行向量化處理:
from sklearn.feature_extraction.text import tfidfvectorizerdef stopwords_list(): with open(r'c:\users\zhousiying\desktop\stopword\hit_stopwords.txt',encoding='utf-8') as f: lines = f.readlines() result = [i.strip('\n') for i in lines] return resultstopwords = stopwords_list()x=tfidfvectorizer(token_pattern=r'(?u)\b\w+\b', max_features=100, ngram_range=(1,2), stop_words=stopwords).fit_transform(data['review']).toarray()
之後,將得到的tf-idf的特徵矩陣進行歸一化處理。需要說明的是,這裡之所以需要進行歸一化處理,是因為後邊可能要用到logistic回歸模型,若logistic回歸使用梯度下降法求最優解,歸一化有助於其快速收斂,否則模型可能會收斂較慢、甚至不能收斂。
from sklearn.preprocessing import standardscalerscaler = standardscaler()x=scaler.fit_transform(x)x=pd.dataframe(x)y=data['label']
在樣本中隨機選擇十分之九的資料作為訓練集訓練模型,剩餘十分之一作為測試集來檢驗模型的效果。
from sklearn.model_selection import train_test_splitxtrain,xtest,ytrain,ytest=train_test_split(x,y,test_size=0.1,random_state=20)
四、模型訓練這裡我們把樸素貝葉斯、logistic回歸、隨機森林、gradientboostingclassifier、xgboost以及lightgbm這五個可以進行二分類的模型作為備選模型。首先看一下這五個模型**的大致效果和所耗時間(若所耗時間過長,是否選用該模型則需要慎重考慮):
import timefrom sklearn.*****_bayes import gaussiannbfrom sklearn.linear_model import logisticregressionfrom sklearn.ensemble import randomforestclassifier, gradientboostingclassifierimport xgboost as xgbimport lightgbm as lgbfrom sklearn.model_selection import cross_val_scoremodel1=gaussiannb()model2=logisticregression()model3=randomforestclassifier()model4=gradientboostingclassifier()model5=xgb.xgbclassifier()model6=lgb.lgbmclassifier()for model in [model1,model2,model3,model4,model5,model6]: start_time=time.time() score=cross_val_score(model,xtrain,ytrain,cv=10,scoring='accuracy').mean() end_time=time.time() time_cost=round(end_time-start_time,2) print('{}模型下的分類準確率為:{},耗時為{}s'.format(model,score,time_cost))
得到的結果如下:
from sklearn.ensemble import votingclassifiermodel_1=lgb.lgbmclassifier(n_estimators=15)model_2=xgb.xgbclassifier(n_estimators=15,max_depth=5)model_3=gradientboostingclassifier()eclf = votingclassifier(estimators=[('lgbc', model_1), ('xgbc', model_2), ('gbc', model_3)], voting='hard')eclf.fit(xtrain,ytrain)
五、模型檢驗用測試集的資料對模型效果進行檢驗:
from sklearn.metrics import accuracy_scoreaccuracy=accuracy_score(eclf.predict(xtest),ytest)accuracy
結果顯示為0.9499958329860821,**效果總體還可以。
六、總結
剛剛入門,資料集比較友好,導致最後的**效果還可以。後邊還會繼續學習lstm、textcnn、bert等模型,以及其他資料預處理方法,相信能有更好的**效果。
微博評論的情感分析
文字處理 情感分析,文字相似度,文字分類 tf idf逆文件頻率 nlp 字串 向量化 貝葉斯訓練 測試 文字相似度 詞頻 文字分類 tf idf 詞頻 逆文件頻率 1.原始文字 2.分詞 3.詞行歸一化 4.去除停用詞 import os,re import numpy as np import ...
微博情感分析 資料的獲取(一)
本人由於研究生的研究方向是自然語言處理 社會輿情分析這個方向的所以本科生畢業設計就選擇了微博情感分析這一方向的題目。主要是完成情感分析這個功能,並把每一步流程都做到。本科生階段可以說這方面實在知之甚少,所以隨著畢業設計進行的過程我也會一直學習,並在這裡分享我的學習過程及心得。微博資料當然是基本了,我...
基於Redis的使用者發微博
步驟1 建立content表create table content id int 10 unsigned not null auto increment,user id int 10 not null default 0 comment 使用者id content varchar 5000 not...