《 Python 機器學習基礎教程》總結(jié)

處理機器學習問題

學完了本書介紹的所有強大的方法眉反,你現(xiàn)在可能很想馬上行動昙啄,開始用你最喜歡的算法來解決數(shù)據(jù)相關的問題。但這通常并不是開始分析的好方法寸五。機器學習算法通常只是更大的數(shù)據(jù)分析與決策過程的一小部分梳凛。為了有效地利用機器學習,我們需要退后一步播歼,全面地思考問題伶跷。首先,你應該思考想要回答什么類型的問題秘狞。你想要做探索性分析叭莫,只是看看能否在數(shù)據(jù)中找到有趣的內(nèi)容?或者你已經(jīng)有了特定的目標烁试?通常來說雇初,你在開始時有一個目標,比如檢測欺詐用戶交易减响、推薦電影或找到未知行星靖诗。如果你有這樣的目標郭怪,那么在構(gòu)建系統(tǒng)來實現(xiàn)目標之前,你應該首先思考如何定義并衡量成功刊橘,以及成功的解決方案對總體業(yè)務目標或研究目標有什么影響鄙才。假設你的目標是欺詐檢測。

然后就出現(xiàn)了下列問題:

  • 如何度量欺詐預測是否實際有效促绵?
  • 我有沒有評估算法的合適數(shù)據(jù)攒庵?
  • 如果我成功了,那么我的解決方案會對業(yè)務造成什么影響败晴?

正如第 5 章中所述浓冒,你最好能使用商業(yè)指標直接度量算法的性能,比如增加利潤或減少損失尖坤。但這通常難以做到稳懒。一個更容易回答的問題是:“如果我構(gòu)建出完美的模型,那么會怎么樣慢味?”如果完美地檢測出所有欺詐行為可以為你的公司每月節(jié)省 100 美元场梆,那么這些省下來的錢可能都不夠保證讓你開始動手開發(fā)算法。如果模型可能為你的公司每月節(jié)省上萬美元贮缕,那么這個問題就值得探索辙谜。

假設你已經(jīng)定義好了要解決的問題俺榆,知道一種解決方案可能對你的項目產(chǎn)生重大影響感昼;此外,你還確信擁有合適的信息來評估模型是否成功罐脊。接下來的步驟通常是獲取數(shù)據(jù)并構(gòu)建工作原型定嗓。本書中我們討論過許多你可以使用的模型,以及如何正確地評估和調(diào)節(jié)這些模型萍桌。但在嘗試這些模型時請記住宵溅,這只是更大的數(shù)據(jù)科學工作流程中的一小部分,模型構(gòu)建通常是“收集新數(shù)據(jù)上炎、清洗數(shù)據(jù)恃逻、構(gòu)建模型和分析模型”這個反饋環(huán)路的一部分。分析模型所犯的錯誤通常告訴我們:數(shù)據(jù)中缺失了哪些內(nèi)容藕施、還可以收集哪些額外數(shù)據(jù)寇损,或者如何重新規(guī)劃任務使機器學習更加高效。收集更多數(shù)據(jù)或不同的數(shù)據(jù)裳食,或者稍微改變?nèi)蝿找?guī)劃矛市,可能會比連續(xù)運行網(wǎng)格搜索來調(diào)參的回報更高。

參與決策過程的人

你還應該考慮是否應該讓人參與決策過程诲祸,以及如何參與浊吏。有些過程(比如無人駕駛汽車的行人檢測)需要立即做出決定而昨。其他過程可能不需要立刻的響應,所以可以讓人來決定不確定的決策找田。舉個例子歌憨,醫(yī)療應用可能需要非常高的精度,單靠機器學習算法可能無法達到墩衙。但如果一個算法可以自動完成 90%躺孝、50% 甚至只有 10% 的決策過程,那么都可能已經(jīng)減少了響應時間或降低了成本底桂。許多應用都以“簡單情況”為主植袍,算法可以對其做出決策,還有相對較少的“復雜情況”籽懦,可以將其重新交給人來決定于个。

從原型到生產(chǎn)

本書中討論的工具對許多機器學習應用來說都是很好的,可以非衬核常快速地進行分析和原型設計厅篓。許多組織,甚至是非常大型的組織捶码,比如國際銀行和全球社交媒體公司羽氮,也將 Python 和 scikit-learn 用于生產(chǎn)系統(tǒng)。但是惫恼,許多公司擁有復雜的基礎架構(gòu)档押,將 Python 集成到這些系統(tǒng)中并不總是很容易。這不一定是個問題祈纯。在許多公司中令宿,數(shù)據(jù)分析團隊使用 Python 或 R 等語言,可以對想法進行快速測試腕窥,而生產(chǎn)團隊則使用 Go粒没、Scala、C++ 和 Java 等語言來構(gòu)建魯棒性更好的可擴展系統(tǒng)簇爆。數(shù)據(jù)分析的需求與構(gòu)建實時服務并不相同癞松,所以這些任務使用不同的語言是有道理的。一個相對常見的解決方案是使用一種高性能語言在更大的框架內(nèi)重新實現(xiàn)分析團隊找到的解決方案入蛆。這種方法比嵌入整個庫或整個編程語言并與不同數(shù)據(jù)格式互相轉(zhuǎn)換要更加簡單响蓉。

無論你能否在生產(chǎn)系統(tǒng)中使用 scikit-learn,重要的是要記住安寺,生產(chǎn)系統(tǒng)的要求與一次性的分析腳本不同厕妖。如果將一個算法部署到更大的系統(tǒng)中,那么會涉及軟件工程方面的很多內(nèi)容挑庶,比如可靠性言秸、可預測性软能、運行時間和內(nèi)存需求。對于在這些領域表現(xiàn)良好的機器學習系統(tǒng)來說举畸,簡單就是關鍵查排。請仔細檢查數(shù)據(jù)處理和預測流程中的每一部分,并問你自己這些問題:每個步驟增加了多少復雜度抄沮?每個組件對數(shù)據(jù)或計算基礎架構(gòu)的變化的魯棒性有多高跋核?每個組件的優(yōu)點能否使其復雜度變得合理?如果你正在構(gòu)建復雜的機器學習系統(tǒng)叛买,我們強烈推薦閱讀 Google 機器學習團隊的研究者發(fā)布的這篇論文:“Machine Learning: The High Interest Credit Card of Technical Debt”(http://research.google.com/pubs/pub43146.html)砂代。這篇文章重點介紹了在大規(guī)模生產(chǎn)中創(chuàng)建并維護機器學習軟件的權衡。

雖然技術債問題在大規(guī)模的長期項目中特別緊迫率挣,但即使是短期和較小的系統(tǒng)刻伊,吸取的教訓也有助于我們構(gòu)建更好的軟件。

測試生產(chǎn)系統(tǒng)

在這本書中椒功,我們介紹了如何基于事先收集的測試集來評估算法的預測結(jié)果捶箱。這被稱為離線評估(offline evaluation)。但如果你的機器學習系統(tǒng)是面向用戶的动漾,那么這只是評估算法的第一步丁屎。下一步通常是在線測試(online testing)或實時測試(live testing),對在整個系統(tǒng)中使用算法的結(jié)果進行評估旱眯。改變網(wǎng)站向用戶呈現(xiàn)的推薦結(jié)果或搜索結(jié)果晨川,可能會極大地改變用戶行為,并導致意想不到的結(jié)果键思。為了防止出現(xiàn)這種意外础爬,大部分面向用戶的服務都會采用 A/B 測試(A/B testing),這是一種盲的(blind)用戶研究形式吼鳞。在 A/B 測試中,在用戶不知情的情況下叫搁,為選中的一部分用戶提供使用算法 A 的網(wǎng)站或服務赔桌,而為其余用戶提供算法 B。對于兩組用戶渴逻,在一段時間內(nèi)記錄相關的成功指標疾党。然后對算法 A 和算法 B 的指標進行對比,并根據(jù)這些指標在兩種方法中做出選擇惨奕。使用 A/B 測試讓我們能夠在實際情況下評估算法雪位,這可能有助于我們發(fā)現(xiàn)用戶與模型交互時的意外后果。通常情況下梨撞,A 是一個新模型雹洗,而 B 是已建立的系統(tǒng)香罐。在線測試中還有比 A/B 測試更為復雜的機制,比如 bandit 算法时肿。John Myles White 的 Bandit Algorithms for Website Optimization(O'Reilly 出版社庇茫,http://shop.oreilly.com/product/0636920027393.do)一書對這一主題做出了很好的介紹。

構(gòu)建你自己的估計器

本書包含 scikit-learn 中實現(xiàn)的大量工具和算法螃成,可用于各種類型的任務旦签。但是,你通常需要對數(shù)據(jù)做一些特殊處理寸宏,這些處理方法沒有在 scikit-learn 中實現(xiàn)宁炫。在將數(shù)據(jù)傳入 scikit-learn 模型或管道之前,只做數(shù)據(jù)預處理可能也足夠了氮凝。但如果你的預處理依賴于數(shù)據(jù)淋淀,而且你還想使用網(wǎng)格搜索或交叉驗證,那么事情就變得有點復雜了覆醇。

我們在第 6 章中討論過將所有依賴于數(shù)據(jù)的處理過程放在交叉驗證循環(huán)中的重要性朵纷。那么如何同時使用你自己的處理過程與 scikit-learn 工具?有一種簡單的解決方案:構(gòu)建你自己的估計器永脓!實現(xiàn)一個與 scikit-learn 接口兼容的估計器是非常簡單的袍辞,從而可以與 PipelineGridSearchCVcross_val_score 一起使用常摧。你可以在 scikit-learn 文檔中找到詳細說明(http://scikit-learn.org/stable/developers/contributing.html#rolling-your-own-estimator)搅吁,但下面是其要點。實現(xiàn)一個變換器類的最簡單的方法落午,就是從 BaseEstimatorTransformerMixin 繼承谎懦,然后實現(xiàn) __init__fitpredict 函數(shù)溃斋,如下所示界拦。

In[1]:

實現(xiàn)一個分類器或回歸器的方法是類似的,你只需要從 ClassifierMixinRegressorMixin 繼承梗劫,而不是 TransformerMixin享甸。此外,你還要實現(xiàn) predict梳侨,而不必實現(xiàn) transform蛉威。

從上面的例子中可以看出,實現(xiàn)你自己的估計器需要很少的代碼走哺,隨著時間的推移蚯嫌,大部分 scikit-learn 用戶都會構(gòu)建出一組自定義模型。

下一步怎么走

本書對機器學習進行了介紹,并讓你成為一名高效的從業(yè)者择示。但是束凑,如果你想要進一步提高機器學習技能,下面是一些關于書籍和更專業(yè)的資源的建議对妄,以便你進一步深入研究湘今。

理論

在本書中,我們試圖直觀地解釋大多數(shù)常見機器學習算法的工作原理剪菱,而不要求你在數(shù)學或計算機科學方面具有堅實的基礎摩瞎。但是,我們討論的許多模型都使用了概率論孝常、線性代數(shù)和最優(yōu)化方面的理論旗们。雖然沒有必要理解這些算法的所有實現(xiàn)細節(jié),但我們認為构灸,了解算法背后的一些理論知識可以讓你成為更優(yōu)秀的數(shù)據(jù)科學家上渴。關于機器學習理論有許多好書,如果我們所講的內(nèi)容激起了你對機器學習可能性的興趣喜颁,那么我們建議你挑選至少一本書深入閱讀稠氮。我們在前言中已經(jīng)提到過 Hastie、Tibshirani 和 Friedman 合著的《統(tǒng)計學習基礎》一書半开,這里值得重新推薦一下隔披。另一本相當好讀的書是 Stephen Marsland 的 Machine Learning: An Algorithmic Perspective(Chapman and Hall/CRC 出版社),它還附帶有 Python 代碼寂拆。還有兩本強烈推薦的經(jīng)典著作:一本是 Christopher Bishop 的 Pattern Recognition and Machine Learning(Springer 出版社)奢米,著重于概率框架;另一本是 Kevin Murphy 的 Machine Learning: A Probabilistic Perspective(MIT 出版社)纠永,全面論述了機器學習方法(1000 多頁)鬓长,深入介紹了最先進的方法,內(nèi)容比本書要豐富得多尝江。

其他機器學習框架和包

雖然 scikit-learn 是我們最喜歡的機器學習軟件包1涉波,Python 也是我們最喜歡的機器學習語言,但還有許多其他選擇茂装。根據(jù)你的需求怠蹂,Python 和 scikit-learn 可能不是你在特定情況下的最佳選擇。通常情況下少态,Python 很適合嘗試與評估模型,但更大型的 Web 服務和應用更常用 Java 或 C++ 編寫易遣,部署模型可能需要與這些系統(tǒng)進行集成彼妻。你想要考慮 scikit-learn 之外的選擇可能還有一個原因,就是你對統(tǒng)計建模和推斷比對預測更感興趣。在這種情況下侨歉,你應該考慮使用 Python 的 statsmodels 包屋摇,它用更具有統(tǒng)計學意義的接口實現(xiàn)了多種線性模型。如果你還沒有專情于 Python幽邓,那么還可以考慮使用 R炮温,這是數(shù)據(jù)科學家的另一種語言。R 是專為統(tǒng)計分析設計的語言牵舵,因其出色的可視化功能和許多可用的統(tǒng)計建模包(通常是非常專業(yè)化的)而聞名柒啤。

另一個常用的機器學習軟件包是 vowpal wabbit(通常簡稱為 vw,以避免繞口)畸颅,一個用 C++ 編寫的高度優(yōu)化的機器學習包担巩,還有命令行界面。vw 對大型數(shù)據(jù)集和流數(shù)據(jù)特別有用没炒。對于在集群上分布式運行的機器學習算法涛癌,在寫作本書時最常用的解決方案之一是 mllib,一個基于 spark 分布式計算環(huán)境構(gòu)建的 Scala 庫送火。

排序拳话、推薦系統(tǒng)與其他學習類型

本書是一本入門書,所以我們重點介紹最常見的機器學習任務:監(jiān)督學習中的分類與回歸种吸,無監(jiān)督學習中的聚類和信號分解弃衍。還有許多類型的機器學習,都有很多重要的應用骨稿。有兩個特別重要的主題沒有包含在本書中笨鸡。第一個是排序問題(ranking),對于特定查詢坦冠,我們希望檢索出按相關性排序的答案形耗。你今天可能已經(jīng)使用過排序系統(tǒng),它是搜索引擎的運行原理辙浑。你輸入搜索查詢并獲取答案的有序列表激涤,它們按相關性進行排序。Manning判呕、Raghavan 和 Schuütze 合著的 Introduction to Information Retrieval 一書給出了對排序問題的很好介紹倦踢。第二個主題是推薦系統(tǒng)(recommender system),就是根據(jù)用戶偏好向他們提供建議侠草。你可能已經(jīng)在“您可能認識的人”“購買此商品的顧客還購買了”或“您的最佳選擇”等標題下遇到過推薦系統(tǒng)辱挥。關于這一主題有大量文獻,如果想立刻投身于這一主題边涕,你可能對目前經(jīng)典的“Netflix 大獎挑戰(zhàn)”(Netflix prize challenge晤碘,http://www.netflixprize.com/)感興趣褂微。Netflix 視頻流網(wǎng)站發(fā)布了關于電影偏好的大型數(shù)據(jù)集,并對給出最佳推薦的團隊獎勵一百萬美元园爷。另一種常見的應用是時間序列預測(比如股票價格)宠蚂,這方面也有大量的文獻。還有許多類型的機器學習任務童社,比我們這里列出的要多得多求厕,我們建議你從書籍、研究論文和在線社區(qū)中獲取信息扰楼,以找到最適合你實際情況的范式呀癣。

概率建模、推斷與概率編程

大部分機器學習軟件包都提供了預定義的機器學習模型灭抑,每種模型應用了一種特定算法十艾。但是,許多現(xiàn)實世界的問題都具有特殊的結(jié)構(gòu)腾节,如果將這種結(jié)構(gòu)正確地納入模型忘嫉,則可以得到性能更好的預測。通常來說案腺,具體問題的結(jié)構(gòu)可以用概率論的語言來表述庆冕。這種結(jié)構(gòu)通常來自于你想要預測的情況的數(shù)學模型。為了理解結(jié)構(gòu)化問題的含義劈榨,請思考下面這個例子访递。

假設你想要構(gòu)建一個在戶外空間提供非常詳細的位置估計的移動應用,以幫助用戶定位歷史遺跡同辣。手機提供了許多傳感器來幫你獲取精確的位置測量拷姿,比如 GPS、加速度計和指南針旱函。你可能還有該區(qū)域的精確地圖响巢。這個問題是高度結(jié)構(gòu)化的。你從地圖中知道了感興趣地點的位置和路徑棒妨。你還從 GPS 中得到了粗略的位置踪古,而用戶設備中的加速度計和指南針可以為你提供非常精確的相對測量。但是券腔,將所有這些工具全部放入黑盒機器學習系統(tǒng)中來預測位置伏穆,可能并不是最好的主意。這將會丟掉你已經(jīng)知道的關于現(xiàn)實世界如何運行的所有信息纷纫。如果指南針和加速度計告訴你一名用戶正在向北走枕扫,而 GPS 告訴你該用戶正在向南走,你可能不相信 GPS辱魁。如果位置估計告訴你用戶剛剛走過一堵墻铡原,你應該也會非常懷疑偷厦∩烫荆可以使用概率模型來表述這種情況燕刻,然后再使用機器學習或概率推斷來找出你應該對每種測量方法的信任程度,并推斷出該用戶位置的最佳猜測剖笙。

一旦你用正確的方式對現(xiàn)狀和不同因素共同作用的模型進行表述卵洗,那么就有一些方法可以利用這些自定義模型直接計算出預測結(jié)果。這些方法中最普遍的方法被稱為概率編程語言弥咪,它們提供了一種非常優(yōu)雅又非常緊湊的方法來表述學習問題过蹂。概率編程語言的常見例子有 PyMC(可用于 Python)和 Stan(可用于多種語言的框架,包括 Python)聚至。雖然這些軟件包需要你對概率論有一些了解酷勺,但它們大大簡化了新模型的創(chuàng)建過程祥款。

神經(jīng)網(wǎng)絡

雖然我們在第 2 章和第 7 章都簡要涉及了神經(jīng)網(wǎng)絡的主題头谜,但這是機器學習快速發(fā)展的領域,每周都會發(fā)布新方法和新應用伐坏。機器學習和人工智能領域的最新突破都由這些進步所驅(qū)動贷币,比如 Alpha Go 程序在圍棋比賽中戰(zhàn)勝人類冠軍击胜、語音理解的性能不斷提高,以及接近實時的語音翻譯的出現(xiàn)役纹。雖然這一領域的進步非常迅速偶摔,以致當前對最新進展的任何參考很快都會過時,但 Ian Goodfellow促脉、Yoshua Bengio 和 Aaron Courville 的新書 Deep Learning(MIT 出版社)對這一主題進行了全面介紹辰斋。2

推廣到更大的數(shù)據(jù)集

在本書中我們總是假設,所處理的數(shù)據(jù)可以被存儲為內(nèi)存(RAM)中的一個 NumPy 數(shù)組或 SciPy 稀疏矩陣瘸味。即使現(xiàn)代服務器通常都具有數(shù)百 GB 的 RAM宫仗,但這也是對你所能處理數(shù)據(jù)大小的根本限制。不是所有人都買得起這么大型的機器硫戈,甚至連從云端供應商租一臺都負擔不起锰什。不過在大多數(shù)應用中,用于構(gòu)建機器學習系統(tǒng)的數(shù)據(jù)量相對較小丁逝,很少有機器學習數(shù)據(jù)集包含數(shù)百 GB 以上的數(shù)據(jù)汁胆。在多數(shù)情況下,這讓擴展內(nèi)存或從云端供應商租一臺機器變成可行的解決方案霜幼。但是嫩码,如果你需要處理 TB 級別的數(shù)據(jù),或者需要節(jié)省處理大量數(shù)據(jù)的費用罪既,那么有兩種基本策略:核外學習(out-of-core learning)與集群上的并行化(parallelization over a cluster)铸题。

核外學習是指從無法保存到主存儲器的數(shù)據(jù)中進行學習铡恕,但在單臺計算機上(甚至是一臺計算機的單個處理器)進行學習。數(shù)據(jù)從硬盤或網(wǎng)絡等來源進行讀取丢间,一次讀取一個樣本或者多個樣本組成的數(shù)據(jù)塊探熔,這樣每個數(shù)據(jù)塊都可以讀入 RAM。然后處理這個數(shù)據(jù)子集并更新模型烘挫,以體現(xiàn)從數(shù)據(jù)中學到的內(nèi)容诀艰。然后舍棄該數(shù)據(jù)塊,并讀取下一塊數(shù)據(jù)饮六。scikit-learn 中的一些模型實現(xiàn)了核外學習其垄,你可以在在線用戶指南中找到相關細節(jié)(http://scikit-learn.org/stable/modules/scaling_strategies.html#scaling-with-instances-using-out-of-core-learning)。因為核外學習要求所有數(shù)據(jù)都由一臺計算機處理卤橄,所以在非常大的數(shù)據(jù)集上的運行時間可能很長绿满。此外,并非所有機器學習算法都可以用這種方法實現(xiàn)窟扑。

另一種擴展策略是將數(shù)據(jù)分配給計算機集群中的多臺計算機喇颁,讓每臺計算機處理部分數(shù)據(jù)。對于某些模型來說這種方法要快得多辜膝,而可以處理的數(shù)據(jù)大小僅受限于集群大小无牵。但是,這種計算通常需要相對復雜的基礎架構(gòu)厂抖。目前最常用的分布式計算平臺之一是在 Hadoop 之上構(gòu)建的 spark 平臺茎毁。sparkMLLib 包中包含一些機器學習功能。如果你的數(shù)據(jù)已經(jīng)位于 Hadoop 文件系統(tǒng)中忱辅,或者你已經(jīng)使用 spark 來預處理數(shù)據(jù)七蜘,那么這可能是最簡單的選項。但如果你還沒有這樣的基礎架構(gòu)墙懂,建立并集成一個 spark 集群可能花費過大橡卤。前面提到的 vw 包提供了一些分布式功能,在這種情況下可能是更好的解決方案损搬。

磨練你的技術

與生活中的許多事情一樣碧库,只有實踐才能讓你成為本書所介紹主題方面的專家。對于不同的任務和不同的數(shù)據(jù)集巧勤,特征提取嵌灰、預處理、可視化和模型構(gòu)建可能差異很大颅悉。你或許足夠幸運沽瞭,已經(jīng)能夠訪問大量數(shù)據(jù)集和任務。如果你還沒有想到什么任務剩瓶,那么一個好的起點是機器學習競賽驹溃,它會發(fā)布一個數(shù)據(jù)集和一個給定任務城丧,許多團隊為得到最佳預測結(jié)果而展開競爭。許多公司豌鹤、非盈利組織和大學都會舉辦這種比賽亡哄。要想找到這些比賽,最常去的地方之一是 Kaggle(https://www.kaggle.com/)傍药,這是一個定期舉辦數(shù)據(jù)科學比賽的網(wǎng)站磺平,其中一些比賽會提供大量獎金。

Kaggle 論壇也是關于機器學習最新工具和技巧的很好的信息來源拐辽,在網(wǎng)站上可以找到大量數(shù)據(jù)集。在 OpenML 平臺(http://www.openml.org/)上可以找到更多的數(shù)據(jù)集及相關任務擦酌,該平臺擁有 20 000 多個數(shù)據(jù)集俱诸,以及 50 000 多個相關的機器學習任務。處理這些數(shù)據(jù)集可以提供練習機器學習技能的好機會赊舶。比賽的一個缺點是睁搭,提供了特定的指標來優(yōu)化,通常還提供了一個固定的笼平、已經(jīng)預處理過的數(shù)據(jù)集园骆。請記住,定義問題和收集數(shù)據(jù)也是現(xiàn)實世界問題的重要方面寓调,用正確的方式表示問題可能比努力提高分類器精度的最后一個百分點要重要得多锌唾。

總結(jié)

我們希望已經(jīng)讓你相信了機器學習在大量應用中的實用性,以及在實踐中實現(xiàn)機器學習的簡單性夺英。繼續(xù)挖掘數(shù)據(jù)晌涕,同時不要忽視大局。

?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末痛悯,一起剝皮案震驚了整個濱河市余黎,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌载萌,老刑警劉巖惧财,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異扭仁,居然都是意外死亡垮衷,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進店門斋枢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來帘靡,“玉大人,你說我怎么就攤上這事瓤帚∶枰Γ” “怎么了涩赢?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長轩勘。 經(jīng)常有香客問我筒扒,道長,這世上最難降的妖魔是什么绊寻? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任花墩,我火速辦了婚禮,結(jié)果婚禮上澄步,老公的妹妹穿的比我還像新娘冰蘑。我一直安慰自己,他們只是感情好村缸,可當我...
    茶點故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布祠肥。 她就那樣靜靜地躺著,像睡著了一般梯皿。 火紅的嫁衣襯著肌膚如雪仇箱。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天东羹,我揣著相機與錄音剂桥,去河邊找鬼。 笑死属提,一個胖子當著我的面吹牛权逗,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播垒拢,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼旬迹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了求类?” 一聲冷哼從身側(cè)響起奔垦,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎尸疆,沒想到半個月后椿猎,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡寿弱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年犯眠,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片症革。...
    茶點故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡筐咧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情量蕊,我是刑警寧澤铺罢,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站残炮,受9級特大地震影響韭赘,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜势就,卻給世界環(huán)境...
    茶點故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一泉瞻、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧苞冯,春花似錦袖牙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至巧娱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間烘贴,已是汗流浹背禁添。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留桨踪,地道東北人老翘。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像锻离,于是被迫代替她去往敵國和親铺峭。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,947評論 2 355

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