如果你是一名薩摩耶犬的主人,你可能曾經(jīng)遇到過(guò)一些挑戰(zhàn),其中一個(gè)常見(jiàn)的問(wèn)題就是他們需要人陪著才睡覺(jué)。這種行為常常會(huì)讓主人感到困惑,但通過(guò)正確的訓(xùn)練和處理,你可以幫助你的薩摩耶建立更健康的睡眠習(xí)慣。在本文中,我們將分享一些關(guān)于如何訓(xùn)練你的薩摩耶犬獨(dú)立入睡的技巧。
了解你的薩摩耶的睡眠需求是訓(xùn)練的第一步。薩摩耶是一種活潑好動(dòng)的犬種,他們需要充足的活動(dòng)量來(lái)消耗體力。如果你的薩摩耶沒(méi)有得到足夠的運(yùn)動(dòng),他們可能會(huì)變得焦躁不安,需要依賴人陪才能入睡。
此外,薩摩耶也是一種非常親近主人的犬種,他們喜歡與主人建立密切的關(guān)系。這種親近傾向可能會(huì)表現(xiàn)在需要人陪才能安心入睡的行為中。因此,訓(xùn)練薩摩耶獨(dú)立入睡需要結(jié)合他們的體能需求和情感需求。
為了幫助你的薩摩耶獨(dú)立入睡,你需要建立一個(gè)固定的睡眠環(huán)境。這包括為你的薩摩耶選擇一個(gè)舒適的睡眠地點(diǎn),比如一個(gè)柔軟的狗床或者專門(mén)的睡眠區(qū)域。這個(gè)地方應(yīng)該安靜、舒適,最好遠(yuǎn)離外界干擾。
另外,為了營(yíng)造助眠的氛圍,你可以為薩摩耶準(zhǔn)備一些安撫的玩具或者盲目,幫助他們放松身心。在這個(gè)固定的睡眠環(huán)境中,讓你的薩摩耶逐漸習(xí)慣獨(dú)立入睡,而不依賴人陪。
訓(xùn)練薩摩耶獨(dú)立入睡是一個(gè)漸進(jìn)式的過(guò)程,你需要耐心和持之以恒。一開(kāi)始,你可以在睡前與他親密接觸,給予他安慰和安撫,然后逐漸減少這種依賴性的行為。
你可以逐漸延長(zhǎng)與他分開(kāi)的時(shí)間,讓他習(xí)慣獨(dú)自入睡。如果你的薩摩耶在夜晚醒來(lái),試圖依賴人陪才能再次入睡,你可以嘗試慢慢減少這種響應(yīng),幫助他建立更獨(dú)立的睡眠能力。
在訓(xùn)練過(guò)程中,你可以使用積極的強(qiáng)化方法來(lái)幫助你的薩摩耶建立獨(dú)立入睡的習(xí)慣。比如,當(dāng)他能夠在沒(méi)有人陪的情況下入睡時(shí),你可以給予他獎(jiǎng)勵(lì),比如零食或者表?yè)P(yáng)。
通過(guò)積極的強(qiáng)化訓(xùn)練,你可以增強(qiáng)你的薩摩耶與獨(dú)立入睡之間的聯(lián)系,幫助他建立更穩(wěn)定的行為模式。記住,訓(xùn)練過(guò)程中要注意及時(shí)給予獎(jiǎng)勵(lì)和正面反饋,以幫助他更好地理解你的期望。
最后,如果你的薩摩耶始終需要人陪才能入睡,可能是因?yàn)樗麄兇嬖谝恍┙】祷蛘咔榫w問(wèn)題。在這種情況下,你應(yīng)該及時(shí)咨詢獸醫(yī)或者專業(yè)的狗行為專家,以找出根本原因并制定合適的治療方案。
有時(shí)候,薩摩耶需要人陪才能入睡可能是因?yàn)樗麄兏械浇箲]或者害怕,需要更多的安慰和支持。了解你的薩摩耶并給予他們足夠的關(guān)愛(ài)和照顧是培養(yǎng)健康睡眠習(xí)慣的關(guān)鍵。
總的來(lái)說(shuō),訓(xùn)練薩摩耶獨(dú)立入睡需要耐心、理解和持之以恒。通過(guò)建立固定的睡眠環(huán)境、漸進(jìn)式訓(xùn)練、積極的強(qiáng)化和關(guān)注健康問(wèn)題,你可以幫助你的薩摩耶建立更健康、更獨(dú)立的睡眠習(xí)慣。記住,與你的寵物建立良好的關(guān)系是培養(yǎng)積極行為的基礎(chǔ),而理解他們的需求和情感是實(shí)現(xiàn)成功訓(xùn)練的關(guān)鍵。
壽險(xiǎn)自然死亡才陪嗎
壽險(xiǎn)是一種人們寄托著對(duì)未來(lái)的期望的保險(xiǎn)產(chǎn)品,它能夠提供保障和經(jīng)濟(jì)支持,確保我們的家人在我們離開(kāi)后能夠有一個(gè)安全的生活。然而,很多人對(duì)于壽險(xiǎn)的保險(xiǎn)賠償有著一些疑問(wèn),特別是當(dāng)被保險(xiǎn)人是因自然死亡而離世時(shí)。
壽險(xiǎn)一般分為兩種類型:自然死亡保險(xiǎn)和意外身故保險(xiǎn)。其中,自然死亡保險(xiǎn)是指當(dāng)被保險(xiǎn)人因自然原因而去世時(shí),壽險(xiǎn)公司會(huì)向受益人支付保險(xiǎn)金額。相比之下,意外身故保險(xiǎn)則是在被保險(xiǎn)人因意外事故而喪命時(shí)進(jìn)行賠付。
對(duì)于自然死亡保險(xiǎn),壽險(xiǎn)公司會(huì)根據(jù)合同中的條款和條件來(lái)確定賠付金額。通常情況下,壽險(xiǎn)合同中會(huì)明確規(guī)定壽險(xiǎn)賠償?shù)姆秶蜅l件。一般來(lái)說(shuō),壽險(xiǎn)保單在自然死亡的情況下是可以獲得賠償?shù)模唧w的賠償金額會(huì)根據(jù)保單的條款而有所不同。
針對(duì)壽險(xiǎn)自然死亡賠付的條件,通常包括以下幾個(gè)方面:
不同的保險(xiǎn)公司在對(duì)壽險(xiǎn)自然死亡賠付問(wèn)題上可能存在差異。有些保險(xiǎn)公司對(duì)自然死亡條件較為寬松,而有些則會(huì)對(duì)自然死亡進(jìn)行更嚴(yán)格的界定。
因此,投保人在購(gòu)買(mǎi)壽險(xiǎn)產(chǎn)品時(shí)應(yīng)該仔細(xì)閱讀合同內(nèi)容,了解保險(xiǎn)公司對(duì)于自然死亡的定義以及賠付條件的具體規(guī)定。如果對(duì)合同中的某些條款存在疑問(wèn),可以咨詢專業(yè)人士或聯(lián)系保險(xiǎn)公司的客服進(jìn)行咨詢。
以下是一些關(guān)于壽險(xiǎn)自然死亡賠付的常見(jiàn)問(wèn)題及答案:
根據(jù)壽險(xiǎn)合同的約定,如果被保險(xiǎn)人因意外事故而導(dǎo)致傷殘或暫時(shí)停工,但并非即時(shí)身故,一般是不符合壽險(xiǎn)賠付條件的。自然死亡保險(xiǎn)主要是針對(duì)被保險(xiǎn)人的身故情況。
大多數(shù)壽險(xiǎn)合同會(huì)規(guī)定自殺在一定期限內(nèi)是不會(huì)進(jìn)行賠付的。通常在自殺時(shí)間起兩年內(nèi),保險(xiǎn)公司不承擔(dān)賠償責(zé)任。自殺在保險(xiǎn)合同中是一種特殊情況,需要謹(jǐn)慎對(duì)待。
壽險(xiǎn)自然死亡保險(xiǎn)一般需要被保險(xiǎn)人進(jìn)行體檢,以確認(rèn)其身體狀況是否適合購(gòu)買(mǎi)該保險(xiǎn)產(chǎn)品。因?yàn)楸kU(xiǎn)公司需要評(píng)估被保險(xiǎn)人的風(fēng)險(xiǎn),從而確定保險(xiǎn)費(fèi)和賠付條件。
總之,在購(gòu)買(mǎi)壽險(xiǎn)自然死亡保險(xiǎn)時(shí),我們需要詳細(xì)了解合同條款,確保自己對(duì)賠付條件有清晰的認(rèn)識(shí)。如果對(duì)合同內(nèi)容有任何疑問(wèn),建議及時(shí)咨詢律師或保險(xiǎn)公司的專業(yè)人員。
近日,一則關(guān)于美女陪導(dǎo)演睡完才知道他說(shuō)的新聞引起了廣泛關(guān)注。這個(gè)事件引發(fā)了許多人的思考和討論,對(duì)于娛樂(lè)圈的黑暗面再次引起了人們的擔(dān)憂。
據(jù)報(bào)道,一位美女模特聲稱自己被一位知名導(dǎo)演邀請(qǐng)到他的家中陪睡。在陪睡的過(guò)程中,這位模特才發(fā)現(xiàn)導(dǎo)演其實(shí)并不會(huì)說(shuō)他所聲稱的流利英語(yǔ),而是一直使用自己的母語(yǔ)與她交流。這對(duì)于那位模特來(lái)說(shuō),是一個(gè)巨大的震驚和打擊。
雖然這件事情只是個(gè)別案例,但它再次引起了人們對(duì)于娛樂(lè)圈黑暗面的關(guān)注。導(dǎo)演與演員之間的關(guān)系向來(lái)備受關(guān)注,有時(shí)候會(huì)因?yàn)橐恍┎坏赖碌男袨槎l(fā)爭(zhēng)議。這次事件的曝光,讓人們對(duì)于娛樂(lè)圈亂象感到憤慨和失望。
在娛樂(lè)圈,有一些不法之徒利用自己的職權(quán)和地位,對(duì)待演員不公正。他們以提供資源和機(jī)會(huì)為借口,去滿足自己的私欲和欺騙他人。這種行為不僅傷害了受害者的利益,也敗壞了整個(gè)娛樂(lè)行業(yè)的形象。
為了避免這種事件的發(fā)生,娛樂(lè)業(yè)需要更加完善的規(guī)范和法律保護(hù)機(jī)制。首先,要建立嚴(yán)格的審核機(jī)制,確保電影、電視劇的制作過(guò)程中不發(fā)生任何不合理的行為。同時(shí),演員們也需要加強(qiáng)法律意識(shí),學(xué)會(huì)保護(hù)自己的合法權(quán)益。
其次,我們需要加大對(duì)于娛樂(lè)圈的監(jiān)管力度。只有加強(qiáng)對(duì)于導(dǎo)演、制片人等行業(yè)人士的監(jiān)督,才能有效地遏制他們的不當(dāng)行為。同時(shí),對(duì)于違法違規(guī)行為要進(jìn)行嚴(yán)厲的處罰,以起到震懾作用。
此外,社會(huì)的監(jiān)督也起到了至關(guān)重要的作用。公眾應(yīng)該保持對(duì)于娛樂(lè)圈的關(guān)注和聲音,通過(guò)輿論的力量推動(dòng)整個(gè)行業(yè)向更加規(guī)范和健康的方向發(fā)展。
對(duì)于演員來(lái)說(shuō),保護(hù)自己的權(quán)益同樣重要。他們需要學(xué)會(huì)如何判斷一個(gè)機(jī)會(huì)是真實(shí)可信還是陷阱。要了解每個(gè)合作方的背景和信譽(yù),對(duì)于不合理的要求和行為要果斷拒絕。
同時(shí),演員也需要通過(guò)自身的努力和能力來(lái)提高自己的地位和話語(yǔ)權(quán)。只有真正擁有了實(shí)力和獨(dú)立思考能力的演員,才能避免成為他人的玩物。
這次事件引起了廣泛的社會(huì)關(guān)注,有助于推動(dòng)娛樂(lè)圈更好地規(guī)范自身。通過(guò)這種曝光,公眾對(duì)于問(wèn)題和亂象有了更深入的了解,同時(shí)也給了受害者更多的關(guān)注和支持。
娛樂(lè)圈作為一個(gè)特殊的行業(yè),需要承擔(dān)起對(duì)社會(huì)的責(zé)任。不僅要?jiǎng)?chuàng)造出優(yōu)秀的作品,還要為整個(gè)社會(huì)樹(shù)立正確的價(jià)值觀和道德標(biāo)準(zhǔn)。只有這樣,我們才能共同努力,讓娛樂(lè)圈成為真正美好的世界。
陪貓咪玩耍是與它建立互動(dòng)和增進(jìn)關(guān)系的好方式。以下是一些可以讓貓咪高興的玩耍方法:
1. 提供適合的玩具:給貓咪提供各種適合它的玩具,如羽毛棒、小球、貓爪板等。貓咪喜歡追逐、抓捕和攻擊的游戲,這些玩具可以激發(fā)它們的獵食本能。
2. 使用互動(dòng)玩具:與貓咪一起使用互動(dòng)玩具,如激光筆或線繩,讓貓咪追逐其中的光點(diǎn)或物體。確保在使用激光筆時(shí)不要直接照射到貓咪身體或眼睛。
3. 增加運(yùn)動(dòng)和追逐:利用長(zhǎng)走廊或開(kāi)闊的空間,與貓咪一起玩追逐游戲。你可以使用玩具或紙球引導(dǎo)貓咪追逐,并給予它鼓勵(lì)和贊美。
4. 制作隱藏和尋找游戲:將貓咪的零食或玩具藏在不同的地方,讓貓咪通過(guò)嗅覺(jué)和探索找到它們。這可以激發(fā)貓咪的智力和探索欲望。
5. 定期互動(dòng)和玩耍時(shí)間:確保每天有一段專門(mén)的時(shí)間與貓咪互動(dòng)和玩耍。這可以增進(jìn)你們之間的關(guān)系,并滿足貓咪的需求。
6. 觀察貓咪的喜好:觀察貓咪的喜好和行為,了解它最喜歡的玩耍方式。有些貓咪喜歡攀爬,你可以為它提供攀爬架或樹(shù)枝;有些貓咪喜歡追逐,你可以使用快速移動(dòng)的玩具引起它們的興趣。
重要的是,尊重貓咪的邊界和需求。如果貓咪不感興趣或表現(xiàn)出不喜歡的行為,就停止相應(yīng)的游戲或活動(dòng)。每只貓咪的個(gè)性和喜好都有所不同,耐心地了解和適應(yīng)貓咪的喜好,與它們建立更深入的互動(dòng)和關(guān)系。
有很多玩的,撓癢癢,撿球球,。。。。。
1、 大聲朗讀
在孩子還沒(méi)有認(rèn)字的情況下,或者說(shuō)還不能夠獨(dú)立的完成閱讀的情況下,父母在陪伴孩子讀書(shū)的時(shí)候,可以大聲的朗讀出來(lái)。
為什么呢?因?yàn)檫@個(gè)時(shí)候孩子還沒(méi)有認(rèn)識(shí)字,不能通過(guò)識(shí)別文字來(lái)觸發(fā)自己的大腦進(jìn)行思考。但是,他能夠辨識(shí)聲音和一些簡(jiǎn)單的語(yǔ)言,那么當(dāng)我們大聲的朗讀的時(shí)候,孩子可以根據(jù)聲音語(yǔ)和言當(dāng)去想象、去判斷我們所要表達(dá)的意思。
在這樣的整個(gè)過(guò)程下來(lái),孩子可以欣賞我們聲音的同時(shí),他自己的想象力、判斷力,以及語(yǔ)言能力都能夠得到一定的鍛煉,從而提升大腦的活躍程度。
2、 尊重孩子
親子閱讀最重要的主角還是孩子。我們要站在孩子的角度去閱讀,去完成這一過(guò)程,用孩子的思考方式進(jìn)行思考。
比如說(shuō),琳琳的孩子快兩歲了,平時(shí)有空的時(shí)候總會(huì)叫媽媽給他講故事,而且最喜歡的就是講龜兔賽賽跑的故事。
琳琳覺(jué)得這個(gè)故事已經(jīng)講了很多遍了,一直跟孩子說(shuō)要換一個(gè)故事,但是孩子總是不肯,就是要聽(tīng)這個(gè)故事才開(kāi)心。
其實(shí),孩子還小,他的記憶能力還是比較弱的,基本上是處于于機(jī)械記憶的階段,不能進(jìn)行邏輯的分析的。
不斷重復(fù)的聲音、語(yǔ)言、動(dòng)作可以和他大腦當(dāng)中先前的的簡(jiǎn)單記憶進(jìn)行快速的聯(lián)系,這樣會(huì)讓孩子感覺(jué)到輕松、安全和愉悅。
所以孩子會(huì)不厭其煩的想去重復(fù)一些行為。往往在這個(gè)時(shí)候我們一定要尊重孩子的選擇,畢竟,對(duì)于大人來(lái)說(shuō)很簡(jiǎn)單的事情,對(duì)孩子來(lái)說(shuō)就不簡(jiǎn)單了。
3、 合適的繪本
想要進(jìn)行閱讀,首先我們必須得選擇繪本,在繪本的選擇上,必須是以孩子為主體,選擇適合孩子年齡階段和成長(zhǎng)規(guī)律的繪本,萬(wàn)不可盲目選讀。
我們陪孩子讀書(shū)時(shí),注意遵從先單字再到詞語(yǔ)、詞組,最后到語(yǔ)句這一個(gè)過(guò)程來(lái)。
那么根據(jù)這樣的規(guī)律,我們要選擇相對(duì)應(yīng)的合適的繪本。開(kāi)始孩子還小的時(shí)候,才剛剛學(xué)會(huì)說(shuō)話,我們要選擇一些只有單字的繪本,隨著孩子年齡的不斷增長(zhǎng),我們要選擇詞語(yǔ)繪本,再后面才到語(yǔ)句繪本,以及小小故事書(shū)。
父母千萬(wàn)不能操之過(guò)急。選擇超越孩子成長(zhǎng)階段的繪本不僅不利于培養(yǎng)孩子的閱讀能力,有可能還會(huì)使孩子對(duì)閱讀產(chǎn)生抵觸情緒。
1 醫(yī)療類的視頻可以拍攝,但需要遵守相關(guān)的法律法規(guī)及行業(yè)規(guī)范,不能違規(guī)。2 醫(yī)療類的視頻屬于特殊領(lǐng)域,需要注意的問(wèn)題比較多。在拍攝前要先進(jìn)行前期準(zhǔn)備,明確拍攝的目的和范圍。拍攝時(shí)需要遵守隱私保護(hù)和知情同意的原則,不得發(fā)布病人信息和病歷資料等敏感信息。另外,在拍攝醫(yī)療手術(shù)過(guò)程時(shí)一定要注意衛(wèi)生和安全,保證醫(yī)護(hù)人員和病人的生命安全。3 為了不違規(guī),建議在拍攝前及時(shí)咨詢相關(guān)專業(yè)人士或機(jī)構(gòu),了解相關(guān)法規(guī)和規(guī)范,確保拍攝過(guò)程和內(nèi)容合法合規(guī)。同時(shí),在拍攝過(guò)程中也應(yīng)該注重輿論導(dǎo)向和宣傳效果,避免敏感信息的泄漏和不良影響的產(chǎn)生。
睡覺(jué)有人陪著睡得香,因?yàn)橛腥嗽谏磉呅睦镉X(jué)得踏實(shí)有安全感。尤其是女性,天生膽子小,一個(gè)人孤單單的睡在床上很容易會(huì)失眠,特別是在寒冷冬天的夜里,又冷又黑,一個(gè)人翻來(lái)覆去睡不著,總感覺(jué)屋里有東西,各種奇怪的聲音,燈開(kāi)了關(guān),關(guān)了開(kāi),如果有個(gè)人陪著睡得就會(huì)踏實(shí)多了
在生活中,我們常常會(huì)面臨需要賠償別人損失的情況。不論是因?yàn)橐馔馐鹿省⑨t(yī)療過(guò)失還是其他原因造成的損害,賠償是維護(hù)社會(huì)公正和平衡的重要環(huán)節(jié)。其中,賠償金額的確定是一個(gè)復(fù)雜的問(wèn)題,需要綜合考慮多個(gè)因素。
賠償?shù)哪康氖鞘故軗p方能夠獲得合理的經(jīng)濟(jì)補(bǔ)償,以彌補(bǔ)因種種原因?qū)е碌膿p失。盡管賠償金額的確定存在一定的法律依據(jù),但具體的計(jì)算方式因案件而異。以下是一些常見(jiàn)的因素,可能影響賠償金額:
賠償?shù)挠?jì)算方法因國(guó)家和地區(qū)而異。一些地方遵循傳統(tǒng)的損害賠償計(jì)算方法,主要根據(jù)受害人的經(jīng)濟(jì)損失和痛苦來(lái)確定賠償金額。其他地方則使用更為復(fù)雜的計(jì)算方法,將經(jīng)濟(jì)損失、社會(huì)影響、公平等因素綜合考慮。
經(jīng)濟(jì)損失計(jì)算是賠償金額計(jì)算中最為重要的一部分。它通常包括以下幾個(gè)方面:
除了經(jīng)濟(jì)損失之外,還有一些賠償項(xiàng)是用于彌補(bǔ)非經(jīng)濟(jì)損失,如精神痛苦、家庭生活受損等。對(duì)于這些損失的計(jì)算較為困難,常常需要綜合考慮以下因素:
賠償金額的計(jì)算中,公平原則是一個(gè)非常重要的考慮因素。公平主要包括以下幾個(gè)方面:
賠償金額的計(jì)算是一個(gè)復(fù)雜而重要的問(wèn)題。在確定賠償金額時(shí),必須綜合考慮受害人的經(jīng)濟(jì)損失、非經(jīng)濟(jì)損失以及公平原則。只有在充分考慮了這些因素后,才能確定一個(gè)合理的賠償金額,使受害人能夠獲得相應(yīng)的補(bǔ)償。
無(wú)論是受害人還是賠償方,都可以通過(guò)專業(yè)的律師咨詢來(lái)了解賠償計(jì)算的具體細(xì)節(jié)和法律依據(jù),以確保自身權(quán)益的合理維護(hù)。只有通過(guò)合理有效的賠償計(jì)算,才能達(dá)到賠償?shù)墓秸x,以及法律的公信力的維護(hù)。
之前看了Mahout官方示例 20news 的調(diào)用實(shí)現(xiàn);于是想根據(jù)示例的流程實(shí)現(xiàn)其他例子。網(wǎng)上看到了一個(gè)關(guān)于天氣適不適合打羽毛球的例子。
訓(xùn)練數(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
檢測(cè)數(shù)據(jù):
sunny,hot,high,weak
結(jié)果:
Yes=》 0.007039
No=》 0.027418
于是使用Java代碼調(diào)用Mahout的工具類實(shí)現(xiàn)分類。
基本思想:
1. 構(gòu)造分類數(shù)據(jù)。
2. 使用Mahout工具類進(jìn)行訓(xùn)練,得到訓(xùn)練模型。
3。將要檢測(cè)數(shù)據(jù)轉(zhuǎn)換成vector數(shù)據(jù)。
4. 分類器對(duì)vector數(shù)據(jù)進(jìn)行分類。
接下來(lái)貼下我的代碼實(shí)現(xiàn)=》
1. 構(gòu)造分類數(shù)據(jù):
在hdfs主要?jiǎng)?chuàng)建一個(gè)文件夾路徑 /zhoujainfeng/playtennis/input 并將分類文件夾 no 和 yes 的數(shù)據(jù)傳到hdfs上面。
數(shù)據(jù)文件格式,如D1文件內(nèi)容: Sunny Hot High Weak
2. 使用Mahout工具類進(jìn)行訓(xùn)練,得到訓(xùn)練模型。
3。將要檢測(cè)數(shù)據(jù)轉(zhuǎn)換成vector數(shù)據(jù)。
4. 分類器對(duì)vector數(shù)據(jù)進(jìn)行分類。
這三步,代碼我就一次全貼出來(lái);主要是兩個(gè)類 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";
/*
* 測(cè)試代碼
*/
public static void main(String[] args) {
//將訓(xùn)練數(shù)據(jù)轉(zhuǎn)換成 vector數(shù)據(jù)
makeTrainVector();
//產(chǎn)生訓(xùn)練模型
makeModel(false);
//測(cè)試檢測(cè)數(shù)據(jù)
BayesCheckData.printResult();
}
public static void makeCheckVector(){
//將測(cè)試數(shù)據(jù)轉(zhuǎn)換成序列化文件
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);
}
//將序列化文件轉(zhuǎn)換成向量文件
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("序列化文件轉(zhuǎn)換成向量失敗!");
System.out.println(2);
}
}
public static void makeTrainVector(){
//將測(cè)試數(shù)據(jù)轉(zhuǎn)換成序列化文件
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);
}
//將序列化文件轉(zhuǎn)換成向量文件
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("序列化文件轉(zhuǎn)換成向量失敗!");
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("生成訓(xùn)練模型失敗!");
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("檢測(cè)數(shù)據(jù)構(gòu)造成vectors初始化時(shí)報(bào)錯(cuò)。。。。");
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í)表示總文檔數(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);
}
// 利用貝葉斯算法開(kāi)始分類,并提取得分最好的分類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("檢測(cè)所屬類別是:"+getCheckResult());
}
}