上市公司歷史新聞數(shù)據(jù)分析(二)

今天小編打算補(bǔ)充一下上一篇上市公司歷史新聞數(shù)據(jù)分析(一)的部分內(nèi)容樱蛤,以及進(jìn)一步闡述如何利用SVM和RandomForest做文本分類及效果對(duì)比痊剖。

? ? ? ?上一篇文章有提到用LDA主題模型做文本特征抽取鬼雀,其實(shí)LDA主要是將“Document x Word”矩陣分解為“Document x Topic”矩陣和“Topic x Word”矩陣。通俗的說(shuō)敛滋,LDA是為了說(shuō)明某一系列的Words放在一起構(gòu)成的Document很有可能在描述某一類Topic寸爆。下圖顯示了在實(shí)驗(yàn)中,將文本集轉(zhuǎn)為lsi向量或lda向量的大致流程:

????????這里順便說(shuō)一下word2vec和doc2vec衩辟,兩者都可以做特征抽取螟炫,但實(shí)驗(yàn)效果都沒(méi)有LDA好,因此也就不描述實(shí)驗(yàn)艺晴。word2vec也叫word embeddings昼钻,就是根據(jù)詞語(yǔ)與上下文詞語(yǔ)的關(guān)系(相關(guān)情況),將已分詞的文本進(jìn)行訓(xùn)練封寞,得到每個(gè)詞的向量表示然评,即詞向量(稠密向量,distributed representation)狈究,并且其中相近意義的詞語(yǔ)將被映射到向量空間中相近的位置碗淌。主要有以下幾點(diǎn)應(yīng)用:(1)計(jì)算詞語(yǔ)間的相似度,比如同樣在城市主題下,衡量“北京”更接近“上汗彷海”還是“廣州”风喇;(2)計(jì)算詞語(yǔ)的類比關(guān)系,比如“King”+“Woman”-“man”近似于“Queen”缕探;(3)計(jì)算文本間的相似度魂莫。word2vec有兩種訓(xùn)練算法,一個(gè)是CBOW模型爹耗,一個(gè)是skip-gram模型耙考,詳細(xì)解釋可參考鏈接<1>。doc2vec又叫做paragraph2vec或者sentenceembeddings潭兽,是一種非監(jiān)督式算法倦始,可以獲得句子/段落/文檔的向量表達(dá),是word2vec的拓展山卦,詳細(xì)解釋可參考鏈接<2>鞋邑。

????????在進(jìn)行文本特征選擇后,接下來(lái)就是文本表示账蓉,也就是把非結(jié)構(gòu)化的文本轉(zhuǎn)為計(jì)算機(jī)可以處理的結(jié)構(gòu)化數(shù)據(jù)形式枚碗。在Gensim的官方教程(參考鏈接<3>)中有提到如何將Gensim類型數(shù)據(jù)轉(zhuǎn)為Numpy和Scipy類型數(shù)據(jù),轉(zhuǎn)換的目的自然是為了適應(yīng)更多機(jī)器學(xué)習(xí)庫(kù)铸本。在模型上肮雨,我選擇了scikit-learn的SVM和RandomForest做對(duì)比。下面是一部分簡(jiǎn)約代碼展示如何用GridSearchCV做參數(shù)優(yōu)化:

fromsklearnimportsvm

fromsklearn.ensembleimportRandomForestClassifier

fromsklearn.externalsimportjoblib

fromsklearn.model_selectionimportGridSearchCV

fromsklearn.metricsimportclassification_report

scores = ['precision']#['precision','recall']

tuned_parameters_svm = {'kernel': ['rbf'],'gamma': [10,20,50,100,150,200], \

'C': [10,15,20,30,50,100]}

tuned_parameters_rdf = {"n_estimators": [10,20,50,80,100],"criterion": ["gini","entropy"], \

"min_samples_leaf": [2,4,6,10,20]}

forscoreinscores:

ifnotos.path.exists('./svm.pkl'):#或'./randomforest.pkl'

clf = GridSearchCV(svm.SVC(), tuned_parameters_svm, cv=5, scoring='%s_weighted'% score)# 構(gòu)造這個(gè)GridSearch的分類器,5-fold

# clf = GridSearchCV(RandomForestClassifier(random_state=14), tuned_parameters_rdf, cv=5, scoring='%s_weighted' % score) # 構(gòu)造這個(gè)GridSearch的分類器,5-fold

clf.fit(train_X, train_Y)# 只在訓(xùn)練集上面做k-fold,然后返回最優(yōu)的模型參數(shù)

joblib.dump(clf,'./svm.pkl')#或'./randomforest.pkl'

else:

clf = joblib.load('./svm.pkl')

print(clf.best_params_)# 輸出最優(yōu)的模型參數(shù)

# for params, mean_score, scores in clf.grid_scores_:

# ? print("%0.3f (+/-%0.03f) for %r" % (mean_score, scores.std() * 2, params))

train_pred = clf.predict(train_X)

test_pred = clf.predict(test_X)# 在測(cè)試集上測(cè)試最優(yōu)的模型的泛化能力.

print(classification_report(test_Y, test_pred))

其中箱玷,scores是優(yōu)化目標(biāo)怨规,可以按照準(zhǔn)確率(precision)或者召回率(recall),當(dāng)然還有別的锡足;tuned_parameters_svm(tuned_parameters_rdf)表示選擇的參數(shù)以及參數(shù)優(yōu)化范圍波丰;訓(xùn)練好的模型最好還是用joblib給保存起來(lái);最后用classification_report打印結(jié)果舱污,如下圖:

依然用山西焦化(600740)作為測(cè)試股票呀舔。首先從所收集的新聞數(shù)據(jù)中抽取與600740相關(guān)的新聞存到新的數(shù)據(jù),并且依據(jù)這些數(shù)據(jù)生成600740的新聞字典以及bow向量扩灯,然后用LDA抽取主題模型向量,并保存霜瘪。最后設(shè)置30個(gè)Epoch珠插,來(lái)對(duì)比SVM和RandomForest在測(cè)試集的分類效果,如下圖:

可見(jiàn)SVM在實(shí)驗(yàn)表現(xiàn)優(yōu)于RandomForest颖对。

????????模型訓(xùn)練好了捻撑,當(dāng)然得測(cè)試一下實(shí)際效果。由于新聞數(shù)據(jù)的收集只是到最近的2月3日,所以用2月3日之后的關(guān)于山西焦化的新聞數(shù)據(jù)進(jìn)行測(cè)試顾患。這里選了新浪財(cái)經(jīng)在2月6日的一篇新聞(網(wǎng)址是參考鏈接<5>)番捂,標(biāo)題是《中央、地方支持政策頻出 煤炭行業(yè)站上了風(fēng)口》江解,和金融界在2月5日的一篇新聞(網(wǎng)址是參考鏈接<6>)设预,標(biāo)題是《[山西焦化]郭文倉(cāng)到終點(diǎn)工程項(xiàng)目督導(dǎo)檢查》,下面是一段簡(jiǎn)約代碼和輸出結(jié)果:

Obj = TextMining(IP="localhost",PORT=27017)

doc = ['中央犁河、地方支持政策頻出,煤炭行業(yè)站上了風(fēng)口 券商研報(bào)浩如煙海鳖枕,投資線索眼花繚亂,第一財(cái)經(jīng)推出\

《一財(cái)研選》產(chǎn)品桨螺,挖掘研報(bào)精華宾符,每期梳理5條投資線索,便于您短時(shí)間內(nèi)獲取有價(jià)值的信息灭翔。專業(yè)團(tuán)隊(duì)\

每周日至每周四晚8點(diǎn)準(zhǔn)時(shí)“上新”魏烫,...'

,\

'郭文倉(cāng)到重點(diǎn)工程項(xiàng)目督導(dǎo)檢查 2月2日,公司黨委書(shū)記、董事長(zhǎng)肝箱、總經(jīng)理郭文倉(cāng),公司董事,股份公司副\

總經(jīng)理哄褒、總工程師、郭毅民,股份公司副總經(jīng)理張國(guó)富狭园、柴高貴 ...'

]

token = Obj.ge2.jieba_tokenize(doc)#分詞

dictionary = corpora.Dictionary.load('./600740_dict.dict')#加載歷史文檔字典

bowvec_doc = [dictionary.doc2bow(text)fortextintoken]#生成新文檔的bow向量

bowvec_all = list(corpora.MmCorpus('D:\\stock_dict_file\\600740\\600740_bowvec.mm'))#加載歷史文檔bow向量

bowvec_all.extend(bowvec_doc)#更新歷史文檔bow向量

_, NewmodelVec = Obj.ge2.CallTransformationModel(dictionary,bowvec_all,modelType='lda',\

tfDim=200,renewModel=False,modelPath='D:\\stock_dict_file\\600740\\')#生成新的lda向量

NewCSRMatrix = Obj.ConvertToCSRMatrix(NewmodelVec)#將新的lda向量轉(zhuǎn)為scipy類型的稀疏矩陣

clf = joblib.load('D:\\stock_dict_file\\600740\\600740_svm.pkl')#加載訓(xùn)練好的svm模型進(jìn)行分類預(yù)測(cè)

fori, newsinenumerate(doc):

ifclf.predict(NewCSRMatrix[i-2,:])[0] ==1:

print('《'+ news.split(' ')[0] +"》"+'是利好消息 ...')

elifclf.predict(NewCSRMatrix[i-2,:])[0] ==-1:

print('《'+ news.split(' ')[0] +"》"+'是利空消息 ...')

else:

print('《'+ news.split(' ')[0] +"》"+'是中立消息 ...')

下面是山西焦化(600740)最近幾天的股票價(jià)格读处,可見(jiàn)2月5日之后股票價(jià)格下跌,當(dāng)然也不排除這幾天的下跌多數(shù)是由系統(tǒng)性風(fēng)險(xiǎn)造成唱矛。但總的來(lái)說(shuō)罚舱,這次的研究還是蠻具有實(shí)戰(zhàn)價(jià)值。

參考鏈接:

<1> http://blog.csdn.net/u014595019/article/details/51884529

<2>?https://www.cnblogs.com/maybe2030/p/5427148.html

<3>?https://radimrehurek.com/gensim/tut1.html#compatibility-with-numpy-and- ? ? ? ?scipy

<4>?http://blog.csdn.net/lixiaowang_327/article/details/53434744

<5>?http://finance.sina.com.cn/stock/hyyj/2018-02-04/doc- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?ifyreyvz9053830.shtml

<6>?http://stock.jrj.com.cn/2018/02/05000024071826.shtml

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末绎谦,一起剝皮案震驚了整個(gè)濱河市管闷,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌窃肠,老刑警劉巖包个,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異冤留,居然都是意外死亡碧囊,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門纤怒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)糯而,“玉大人,你說(shuō)我怎么就攤上這事泊窘∠ㄍ眨” “怎么了像寒?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)瓜贾。 經(jīng)常有香客問(wèn)我诺祸,道長(zhǎng),這世上最難降的妖魔是什么祭芦? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任筷笨,我火速辦了婚禮,結(jié)果婚禮上实束,老公的妹妹穿的比我還像新娘奥秆。我一直安慰自己,他們只是感情好咸灿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布构订。 她就那樣靜靜地躺著,像睡著了一般避矢。 火紅的嫁衣襯著肌膚如雪悼瘾。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,718評(píng)論 1 305
  • 那天审胸,我揣著相機(jī)與錄音亥宿,去河邊找鬼。 笑死砂沛,一個(gè)胖子當(dāng)著我的面吹牛烫扼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播碍庵,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼映企,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了静浴?” 一聲冷哼從身側(cè)響起堰氓,我...
    開(kāi)封第一講書(shū)人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎苹享,沒(méi)想到半個(gè)月后双絮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡得问,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年囤攀,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片宫纬。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡抚岗,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出哪怔,到底是詐尸還是另有隱情宣蔚,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布认境,位于F島的核電站胚委,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏叉信。R本人自食惡果不足惜亩冬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望硼身。 院中可真熱鬧硅急,春花似錦、人聲如沸佳遂。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)丑罪。三九已至荚板,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間吩屹,已是汗流浹背跪另。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留煤搜,地道東北人免绿。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像擦盾,于是被迫代替她去往敵國(guó)和親嘲驾。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容