紫金科技創(chuàng)業(yè)是當今社會中備受關注的話題之一,許多年輕人和企業(yè)家都在努力創(chuàng)造出下一個獨角獸公司。作為一名投資專員,我深知這背后的辛苦和挑戰(zhàn)。在這篇博文中,我想分享一些關于紫金科技創(chuàng)業(yè)和投資的見解和經(jīng)驗。
當下,紫金科技創(chuàng)業(yè)迎來了前所未有的繁榮期。隨著科技的迅猛發(fā)展和資金的不斷涌入,許多創(chuàng)業(yè)者開始尋找機會在這個領域獲得成功。從共享經(jīng)濟到人工智能,各種創(chuàng)新技術不斷涌現(xiàn),為紫金科技創(chuàng)業(yè)帶來了無限可能。
作為投資專員,我負責對紫金科技創(chuàng)業(yè)項目進行審查和評估。我需要深入了解每個項目的商業(yè)模式、市場前景以及團隊背景。只有通過深入的盡職調(diào)查,才能幫助投資者做出明智的決策,并為項目的成功提供支持和指導。
在紫金科技創(chuàng)業(yè)領域,投資策略和風險控制至關重要。我需要密切關注市場動向,及時調(diào)整投資組合,降低投資風險。同時,我還要識別和挖掘具有潛力的創(chuàng)業(yè)項目,為投資者創(chuàng)造更多的價值。
隨著紫金科技創(chuàng)業(yè)的不斷發(fā)展,未來的機會與挑戰(zhàn)并存。創(chuàng)新技術的應用將不斷提升人們的生活質(zhì)量,同時也會帶來一系列新的挑戰(zhàn)與變革。作為一名投資專員,我將繼續(xù)秉承專業(yè)精神,為紫金科技創(chuàng)業(yè)領域的發(fā)展貢獻自己的力量。
華泰紫金證券投資基金是一家領先的投資管理機構,致力于為投資者提供專業(yè)、穩(wěn)健的投資方案。作為華泰紫金證券旗下的基金子公司,該基金秉承著華泰紫金的優(yōu)質(zhì)資源和專業(yè)經(jīng)驗,為廣大投資者提供全方位的資產(chǎn)配置服務。
華泰紫金證券投資基金根據(jù)市場情況和投資需求,采用多元化、差異化的投資策略。基金經(jīng)理團隊擁有豐富的投資經(jīng)驗和深厚的市場洞察力,能夠迅速捕捉到市場機會并進行相應的調(diào)整。無論是價值投資、成長投資、還是主動投資、被動投資,華泰紫金證券投資基金始終以穩(wěn)健的風險控制和長遠的業(yè)績?yōu)槟繕恕?/p>
核心競爭力:
華泰紫金證券投資基金的投資范圍涵蓋了多個資產(chǎn)類別,包括股票、債券、貨幣市場工具等,具有較高的配置靈活性。投資風格上,該基金以價值投資為主導,注重研究企業(yè)基本面和估值水平,從而找到低估值的投資機會。同時,基金經(jīng)理團隊也充分考慮市場的短期波動和風險,靈活調(diào)整投資組合,以保障投資者的利益。
華泰紫金證券投資基金以其卓越的投資績效贏得了廣大投資者的認可。基金經(jīng)理團隊精準的買入和賣出時機、優(yōu)異的風控能力以及深入的行業(yè)研究都為基金的業(yè)績提供了堅實的支撐。根據(jù)歷史數(shù)據(jù),華泰紫金證券投資基金的回報率長期保持在行業(yè)前列,為投資者創(chuàng)造了豐厚的收益。
想要享受華泰紫金證券投資基金的專業(yè)投資服務?入駐華泰紫金證券投資基金非常簡單。只需要登錄華泰紫金證券官方網(wǎng)站,找到基金入駐申請界面,按照要求填寫相關信息,通過審核后即可開始享受基金的投資服務。
作為一家實力領先的投資管理機構,華泰紫金證券投資基金以其專業(yè)的投資策略、出色的投資績效和優(yōu)質(zhì)的客戶服務贏得了廣大投資者的信賴。通過入駐華泰紫金證券投資基金,您將能夠享受到專業(yè)的資產(chǎn)配置服務,獲取穩(wěn)定的投資收益。
感謝您閱讀完這篇文章,希望通過這篇文章的介紹,您能夠了解華泰紫金證券投資基金的實力和優(yōu)勢,并在投資中做出明智的決策。
紫金所背后所依托的投資集團是南京紫金投資集團有限責任公司,而這家公司又是由南京市國資委全資控股,所以它的安全性,公正性是毋庸置疑的。
紫金礦業(yè)作為中國最大的黃金生產(chǎn)企業(yè)之一,其港股股價一直備受關注。近期,紫金礦業(yè)港股股價出現(xiàn)了一定的波動,這在一定程度上受到黃金價格、全球金融市場走勢等多方面因素的影響。
黃金作為紫金礦業(yè)的主要產(chǎn)品之一,其國際市場價格波動直接影響著紫金礦業(yè)的盈利能力和港股股價。近期,全球金融市場不穩(wěn)定,黃金作為避險資產(chǎn)的地位再次凸顯,這也為紫金礦業(yè)港股股價提供了一定的支撐。
全球金融市場的不確定性因素,如中美貿(mào)易摩擦、地緣政治緊張局勢等,也對紫金礦業(yè)港股股價造成了一定程度的波動。投資者對于避險資產(chǎn)的需求會受到這些因素的影響,進而影響紫金礦業(yè)的股價。
綜合考慮黃金價格、全球金融市場走勢以及紫金礦業(yè)自身發(fā)展情況,我們認為當前階段紫金礦業(yè)港股具備較好的投資機會。長期來看,黃金作為避險資產(chǎn)的地位不會輕易動搖,加之紫金礦業(yè)在黃金行業(yè)的龍頭地位,投資者可以逢低建倉,長期持有。
感謝您閱讀本文,希望本文能為您對紫金礦業(yè)港股股價的分析提供一定的幫助。
紫金薰衣草是一種美麗的花卉,其迷人的紫色花朵和芳香的氣味吸引了眾多花卉愛好者。它是一種多年生植物,屬于薰衣草科,原產(chǎn)于地中海地區(qū)。如今,在全球范圍內(nèi)種植和栽培,在花圃、庭院和花壇中可見到紫金薰衣草的身影。
紫金薰衣草以其獨特的特點而受到贊賞。它具有以下特點:
紫金薰衣草的栽培并不困難,只需注意以下幾個技巧:
紫金薰衣草不僅僅是一種觀賞花卉,它還有許多用途:
紫金薰衣草是一種迷人的花卉,不僅具有美麗的花朵和芳香的氣味,而且還具有許多用途。無論是觀賞、室內(nèi)裝飾還是草藥治療,紫金薰衣草都展現(xiàn)出其獨特的魅力。如果你是花卉愛好者或者對精油療法感興趣,不妨考慮在自己的花園中種植一些紫金薰衣草,你會被它們的美麗和多樣化的用途所驚艷。
紫金駕校是一家領先的駕駛培訓機構,致力于為學員提供高質(zhì)量的駕駛課程和專業(yè)的教練團隊。我們擁有多年的教學經(jīng)驗,深知每位學員的需求和特點,因此能夠針對個體差異制定個性化的學習計劃,幫助學員快速提升駕駛技能。
作為一家專業(yè)的駕駛培訓機構,紫金駕校在教學過程中始終遵循以下原則:
在紫金駕校,學員不僅能夠掌握駕駛的基本技能,還能夠了解交通法規(guī)和安全知識,培養(yǎng)正確的駕駛態(tài)度與習慣。我們的教練團隊經(jīng)驗豐富,具備扎實的教學功底和豐富的駕駛經(jīng)驗,能夠耐心指導學員,幫助他們克服駕駛中的困難與挑戰(zhàn)。
紫金駕校提供多種駕駛課程,包括機動車駕駛、客車駕駛、貨車駕駛等多個類別。學員可以根據(jù)自身需求選擇適合的課程,每個課程都經(jīng)過精心設計,內(nèi)容全面豐富,涵蓋了駕駛技能、交通法規(guī)、車輛檢修等多個方面。
我們還提供補習課程和模擬考試,幫助學員檢驗學習效果,發(fā)現(xiàn)不足之處,并及時進行彌補。紫金駕校的課程設置靈活多樣,能夠滿足不同學員的需求,幫助他們快速通過駕駛考試,取得駕駛證書。
紫金駕校擁有先進的教學設備和良好的教學環(huán)境,為學員提供優(yōu)質(zhì)的學習條件。我們的教室寬敞明亮,配備了多媒體教學設備,能夠有效地輔助教學,提高學習效果。
駕校的練車場地寬闊平整,符合交通標準,能夠讓學員充分練習各項駕駛技能,提高駕駛水平。教練團隊嚴格遵守教學規(guī)范,確保教學過程安全有序,有效地保障學員的學習體驗。
多年來,紫金駕校培養(yǎng)了大量優(yōu)秀的駕駛員,贏得了學員們的好評與信賴。他們認為紫金駕校的教學質(zhì)量高,教練團隊專業(yè),課程設置合理,教學環(huán)境優(yōu)越。
學員們表示,在紫金駕校的學習經(jīng)歷讓他們受益匪淺,不僅提升了駕駛技能,還培養(yǎng)了安全意識和責任感。他們紛紛推薦紫金駕校給身邊的朋友和家人,希望更多的人能夠通過紫金駕校獲得優(yōu)質(zhì)的駕駛培訓。
紫金駕校將繼續(xù)秉承專業(yè)、嚴謹、負責的教學理念,努力為學員提供更優(yōu)質(zhì)的駕駛培訓服務。我們相信,在紫金駕校的指導下,每位學員都能夠成為一名安全、合格的駕駛員,為交通安全貢獻自己的力量。
中國是一個有著悠久歷史和豐富文化的國家,同時也是培育和繁殖獨特品種的樂土。在中國的寵物犬種當中,紫金藏獒無疑是最引人注目的一種。這種古老的犬種在國內(nèi)外享有盛譽,被譽為中國最優(yōu)秀的護衛(wèi)犬之一。
紫金藏獒的獨特之處在於它們的外貌和性格特點。這種犬種具有壯碩、肌肉發(fā)達的體型,體重通常超過100公斤,肩高可達75厘米。部呈現(xiàn)出方形,鼻子寬闊,下顎強壯,咬合力極大。
紫金藏獒的毛色多樣,有金色、黑色、灰色、銀色等,且毛質(zhì)柔軟而密集,具有極強的保護性和適應力。它們的眼睛深邃而燦爛,充滿睿智之光。
除了外貌上的獨特之處,紫金藏獒還具有堅毅而忠誠的性格。它們擁有強大的保護和守護本能,對主人極為忠心耿耿,非常善於保護家人和財產(chǎn)。
紫金藏獒是中國最優(yōu)秀的藏獒品種之一。從古老的塞北到喜馬拉雅山脈,藏獒一直與中國的歷史和文化息息相關。它們最早出現(xiàn)在中國北方的大草原地帶,隨著漢朝的興衰而逐漸發(fā)展壯大。
紫金藏獒被稱為"紫金",是因為它們優(yōu)秀的品質(zhì)和珍貴的身價,與"天子"的象徵-"紫金之尊"相映成趣。紫金藏獒的歷史可以追溯到數(shù)千年前,它們被譽為中國皇帝的守衛(wèi)和尊榮象徵。
由於紫金藏獒具有強大的護衛(wèi)能力和出色的適應力,它們在中國被廣泛使用於警察和軍方的護衛(wèi)工作中。在現(xiàn)代社會,紫金藏獒也成為了許多富有人士和名人的寵物選擇。
紫金藏獒的護衛(wèi)能力得益於其堅韌的體型和頑強的性格。它們具有出色的聽覺和嗅覺,能夠準確判斷威脅並做出反應。紫金藏獒在面對威脅時,會發(fā)出震耳欲聾的威嚇聲,嚇退侵入者。
紫金藏獒還可以在極端的氣候件下生存,具有耐寒、耐熱的特點。在高海拔地區(qū),紫金藏獒是適應最好的犬種之一,能夠抵禦強風、低氧和惡劣氣候帶來的挑戰(zhàn)。
作為一種優(yōu)秀的護衛(wèi)犬品種,紫金藏獒需要專業(yè)的飼養(yǎng)和訓練。由於其體型和性格特點,紫金藏獒需要足夠的活動空間和運動量。飼主應該為它們提供足夠的運動和鍛煉,確保其體能和耐力。
在飼養(yǎng)紫金藏獒的過程中,注意良好的飲食和定期的健康檢查是至關重要的。紫金藏獒的飲食應該均衡而富有營養(yǎng),以確保其身體健康和免疫力。定期的健康檢查可以及早發(fā)現(xiàn)和治療潛在的健康問題。
在訓練方面,紫金藏獒需要早期社交化和基礎服從訓練。早期社交化可以幫助紫金藏獒適應不同的環(huán)境和人群,減少對陌生人的敵對性。基礎服從訓練可以建立起犬主關係,以確保紫金藏獒遵從主人的指令和指引。
紫金藏獒作為中國最優(yōu)秀的護衛(wèi)犬品種之一,以其壯碩的體型和堅毅的性格贏得了無數(shù)人的喜愛和尊重。無論是在家庭、軍事還是警察領域,紫金藏獒都展現(xiàn)出出色的護衛(wèi)能力和忠心耿耿的品質(zhì)。
在飼養(yǎng)紫金藏獒的同時,我們應該給予它們適當?shù)年P愛和尊重。適當?shù)娘曫B(yǎng)和訓練可以保證紫金藏獒的健康和快樂,同時讓我們感受到它們無私的愛和護衛(wèi)。
紫金礦業(yè)是中國最大的黃金生產(chǎn)企業(yè)之一,也是全球知名的礦業(yè)公司之一。作為一家上市公司,紫金礦業(yè)股票在多個交易市場都有交易,其中包括港股市場。本文將著重探討紫金礦業(yè)在港股市場的股票投資,分析其利與弊。
香港是亞洲最重要的金融中心之一,港股市場作為全球最大的股票市場之一,吸引著眾多國內(nèi)外投資者的關注。港股市場以其高度開放的特點和便捷的交易方式,為投資者提供了廣泛的選擇,同時也給投資者帶來了不少利益。
作為中國最大的黃金生產(chǎn)企業(yè)之一,紫金礦業(yè)在港股市場具備一定的投資價值。當前全球金融市場的不確定性增加,黃金作為避險資產(chǎn)備受關注,投資紫金礦業(yè)股票可以獲得黃金市場上的收益。此外,紫金礦業(yè)的業(yè)務規(guī)模龐大,良好的管理團隊和穩(wěn)定的發(fā)展趨勢也為其帶來了投資機會。
投資港股股票需要了解港股市場的交易規(guī)則和投資方式,選擇合適的證券??司開通港股賬戶,并根據(jù)自身的風險承受能力和投資目標進行股票選擇和買賣決策。
港股市場作為全球最大的股票市場之一,投資者可以通過購買紫金礦業(yè)股票來參與其中。投資港股股票有其優(yōu)勢,如國際化程度高、品種豐富等;同時也存在著一定的風險,如市場波動大、政策風險等。投資者在進行港股投資時需要認真研究并評估風險和收益,以做出相應的投資決策。
感謝您閱讀本文,通過了解紫金礦業(yè)在港股市場的投資情況,希望能為您帶來一定的幫助。
好
紫金鼠紫金皮原皮變色快,盤玩效果好。一般成熟度好的鼠,密度和油性都不錯,所以上色包漿的效果就會快一些,一盤玩一周表皮會變色加深,兩周會變得油潤好看,一個月左右就會慢慢開始上漿。見效快是紫金鼠的一大特點。
紫金鼠最開始變色時,顏色又紅又潤,有點像包漿的鳳眼,但是它包漿變色的效快多了。
之前看了Mahout官方示例 20news 的調(diào)用實現(xiàn);于是想根據(jù)示例的流程實現(xiàn)其他例子。網(wǎng)上看到了一個關于天氣適不適合打羽毛球的例子。
訓練數(shù)據(jù):
Day Outlook Temperature Humidity Wind PlayTennis
D1 Sunny Hot High Weak No
D2 Sunny Hot High Strong No
D3 Overcast Hot High Weak Yes
D4 Rain Mild High Weak Yes
D5 Rain Cool Normal Weak Yes
D6 Rain Cool Normal Strong No
D7 Overcast Cool Normal Strong Yes
D8 Sunny Mild High Weak No
D9 Sunny Cool Normal Weak Yes
D10 Rain Mild Normal Weak Yes
D11 Sunny Mild Normal Strong Yes
D12 Overcast Mild High Strong Yes
D13 Overcast Hot Normal Weak Yes
D14 Rain Mild High Strong No
檢測數(shù)據(jù):
sunny,hot,high,weak
結果:
Yes=》 0.007039
No=》 0.027418
于是使用Java代碼調(diào)用Mahout的工具類實現(xiàn)分類。
基本思想:
1. 構造分類數(shù)據(jù)。
2. 使用Mahout工具類進行訓練,得到訓練模型。
3。將要檢測數(shù)據(jù)轉換成vector數(shù)據(jù)。
4. 分類器對vector數(shù)據(jù)進行分類。
接下來貼下我的代碼實現(xiàn)=》
1. 構造分類數(shù)據(jù):
在hdfs主要創(chuàng)建一個文件夾路徑 /zhoujainfeng/playtennis/input 并將分類文件夾 no 和 yes 的數(shù)據(jù)傳到hdfs上面。
數(shù)據(jù)文件格式,如D1文件內(nèi)容: Sunny Hot High Weak
2. 使用Mahout工具類進行訓練,得到訓練模型。
3。將要檢測數(shù)據(jù)轉換成vector數(shù)據(jù)。
4. 分類器對vector數(shù)據(jù)進行分類。
這三步,代碼我就一次全貼出來;主要是兩個類 PlayTennis1 和 BayesCheckData = =》
package myTesting.bayes;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.util.ToolRunner;
import org.apache.mahout.classifier.naivebayes.training.TrainNaiveBayesJob;
import org.apache.mahout.text.SequenceFilesFromDirectory;
import org.apache.mahout.vectorizer.SparseVectorsFromSequenceFiles;
public class PlayTennis1 {
private static final String WORK_DIR = "hdfs://192.168.9.72:9000/zhoujianfeng/playtennis";
/*
* 測試代碼
*/
public static void main(String[] args) {
//將訓練數(shù)據(jù)轉換成 vector數(shù)據(jù)
makeTrainVector();
//產(chǎn)生訓練模型
makeModel(false);
//測試檢測數(shù)據(jù)
BayesCheckData.printResult();
}
public static void makeCheckVector(){
//將測試數(shù)據(jù)轉換成序列化文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"testinput";
String output = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();
String[] params = new String[]{"-i",input,"-o",output,"-ow"};
ToolRunner.run(sffd, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件序列化失敗!");
System.exit(1);
}
//將序列化文件轉換成向量文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-test-seq";
String output = WORK_DIR+Path.SEPARATOR+"tennis-test-vectors";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();
String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};
ToolRunner.run(svfsf, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("序列化文件轉換成向量失敗!");
System.out.println(2);
}
}
public static void makeTrainVector(){
//將測試數(shù)據(jù)轉換成序列化文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"input";
String output = WORK_DIR+Path.SEPARATOR+"tennis-seq";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SequenceFilesFromDirectory sffd = new SequenceFilesFromDirectory();
String[] params = new String[]{"-i",input,"-o",output,"-ow"};
ToolRunner.run(sffd, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("文件序列化失敗!");
System.exit(1);
}
//將序列化文件轉換成向量文件
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-seq";
String output = WORK_DIR+Path.SEPARATOR+"tennis-vectors";
Path in = new Path(input);
Path out = new Path(output);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
SparseVectorsFromSequenceFiles svfsf = new SparseVectorsFromSequenceFiles();
String[] params = new String[]{"-i",input,"-o",output,"-lnorm","-nv","-wt","tfidf"};
ToolRunner.run(svfsf, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("序列化文件轉換成向量失敗!");
System.out.println(2);
}
}
public static void makeModel(boolean completelyNB){
try {
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String input = WORK_DIR+Path.SEPARATOR+"tennis-vectors"+Path.SEPARATOR+"tfidf-vectors";
String model = WORK_DIR+Path.SEPARATOR+"model";
String labelindex = WORK_DIR+Path.SEPARATOR+"labelindex";
Path in = new Path(input);
Path out = new Path(model);
Path label = new Path(labelindex);
FileSystem fs = FileSystem.get(conf);
if(fs.exists(in)){
if(fs.exists(out)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(out, true);
}
if(fs.exists(label)){
//boolean參數(shù)是,是否遞歸刪除的意思
fs.delete(label, true);
}
TrainNaiveBayesJob tnbj = new TrainNaiveBayesJob();
String[] params =null;
if(completelyNB){
params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow","-c"};
}else{
params = new String[]{"-i",input,"-el","-o",model,"-li",labelindex,"-ow"};
}
ToolRunner.run(tnbj, params);
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("生成訓練模型失敗!");
System.exit(3);
}
}
}
package myTesting.bayes;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.PathFilter;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.mahout.classifier.naivebayes.BayesUtils;
import org.apache.mahout.classifier.naivebayes.NaiveBayesModel;
import org.apache.mahout.classifier.naivebayes.StandardNaiveBayesClassifier;
import org.apache.mahout.common.Pair;
import org.apache.mahout.common.iterator.sequencefile.PathType;
import org.apache.mahout.common.iterator.sequencefile.SequenceFileDirIterable;
import org.apache.mahout.math.RandomAccessSparseVector;
import org.apache.mahout.math.Vector;
import org.apache.mahout.math.Vector.Element;
import org.apache.mahout.vectorizer.TFIDF;
import com.google.common.collect.ConcurrentHashMultiset;
import com.google.common.collect.Multiset;
public class BayesCheckData {
private static StandardNaiveBayesClassifier classifier;
private static Map<String, Integer> dictionary;
private static Map<Integer, Long> documentFrequency;
private static Map<Integer, String> labelIndex;
public void init(Configuration conf){
try {
String modelPath = "/zhoujianfeng/playtennis/model";
String dictionaryPath = "/zhoujianfeng/playtennis/tennis-vectors/dictionary.file-0";
String documentFrequencyPath = "/zhoujianfeng/playtennis/tennis-vectors/df-count";
String labelIndexPath = "/zhoujianfeng/playtennis/labelindex";
dictionary = readDictionnary(conf, new Path(dictionaryPath));
documentFrequency = readDocumentFrequency(conf, new Path(documentFrequencyPath));
labelIndex = BayesUtils.readLabelIndex(conf, new Path(labelIndexPath));
NaiveBayesModel model = NaiveBayesModel.materialize(new Path(modelPath), conf);
classifier = new StandardNaiveBayesClassifier(model);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("檢測數(shù)據(jù)構造成vectors初始化時報錯。。。。");
System.exit(4);
}
}
/**
* 加載字典文件,Key: TermValue; Value:TermID
* @param conf
* @param dictionnaryDir
* @return
*/
private static Map<String, Integer> readDictionnary(Configuration conf, Path dictionnaryDir) {
Map<String, Integer> dictionnary = new HashMap<String, Integer>();
PathFilter filter = new PathFilter() {
@Override
public boolean accept(Path path) {
String name = path.getName();
return name.startsWith("dictionary.file");
}
};
for (Pair<Text, IntWritable> pair : new SequenceFileDirIterable<Text, IntWritable>(dictionnaryDir, PathType.LIST, filter, conf)) {
dictionnary.put(pair.getFirst().toString(), pair.getSecond().get());
}
return dictionnary;
}
/**
* 加載df-count目錄下TermDoc頻率文件,Key: TermID; Value:DocFreq
* @param conf
* @param dictionnaryDir
* @return
*/
private static Map<Integer, Long> readDocumentFrequency(Configuration conf, Path documentFrequencyDir) {
Map<Integer, Long> documentFrequency = new HashMap<Integer, Long>();
PathFilter filter = new PathFilter() {
@Override
public boolean accept(Path path) {
return path.getName().startsWith("part-r");
}
};
for (Pair<IntWritable, LongWritable> pair : new SequenceFileDirIterable<IntWritable, LongWritable>(documentFrequencyDir, PathType.LIST, filter, conf)) {
documentFrequency.put(pair.getFirst().get(), pair.getSecond().get());
}
return documentFrequency;
}
public static String getCheckResult(){
Configuration conf = new Configuration();
conf.addResource(new Path("/usr/local/hadoop/conf/core-site.xml"));
String classify = "NaN";
BayesCheckData cdv = new BayesCheckData();
cdv.init(conf);
System.out.println("init done...............");
Vector vector = new RandomAccessSparseVector(10000);
TFIDF tfidf = new TFIDF();
//sunny,hot,high,weak
Multiset<String> words = ConcurrentHashMultiset.create();
words.add("sunny",1);
words.add("hot",1);
words.add("high",1);
words.add("weak",1);
int documentCount = documentFrequency.get(-1).intValue(); // key=-1時表示總文檔數(shù)
for (Multiset.Entry<String> entry : words.entrySet()) {
String word = entry.getElement();
int count = entry.getCount();
Integer wordId = dictionary.get(word); // 需要從dictionary.file-0文件(tf-vector)下得到wordID,
if (StringUtils.isEmpty(wordId.toString())){
continue;
}
if (documentFrequency.get(wordId) == null){
continue;
}
Long freq = documentFrequency.get(wordId);
double tfIdfValue = tfidf.calculate(count, freq.intValue(), 1, documentCount);
vector.setQuick(wordId, tfIdfValue);
}
// 利用貝葉斯算法開始分類,并提取得分最好的分類label
Vector resultVector = classifier.classifyFull(vector);
double bestScore = -Double.MAX_VALUE;
int bestCategoryId = -1;
for(Element element: resultVector.all()) {
int categoryId = element.index();
double score = element.get();
System.out.println("categoryId:"+categoryId+" score:"+score);
if (score > bestScore) {
bestScore = score;
bestCategoryId = categoryId;
}
}
classify = labelIndex.get(bestCategoryId)+"(categoryId="+bestCategoryId+")";
return classify;
}
public static void printResult(){
System.out.println("檢測所屬類別是:"+getCheckResult());
}
}