Scikit-learn使用總結(jié)

在機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的應(yīng)用中,scikit-learn是一個(gè)功能強(qiáng)大的python包。在數(shù)據(jù)量不是過(guò)大的情況下须板,可以解決大部分問(wèn)題榛鼎。學(xué)習(xí)使用scikit-learn的過(guò)程中逃呼,我自己也在補(bǔ)充著機(jī)器學(xué)習(xí)和數(shù)據(jù)挖掘的知識(shí)鳖孤。這里根據(jù)自己學(xué)習(xí)sklearn的經(jīng)驗(yàn),我做一個(gè)總結(jié)的筆記抡笼。另外苏揣,我也想把這篇筆記一直更新下去。

1 scikit-learn基礎(chǔ)介紹

1.1 估計(jì)器(Estimator)

估計(jì)器推姻,很多時(shí)候可以直接理解成分類(lèi)器平匈,主要包含兩個(gè)函數(shù):

  • fit():訓(xùn)練算法,設(shè)置內(nèi)部參數(shù)藏古。接收訓(xùn)練集和類(lèi)別兩個(gè)參數(shù)增炭。
  • predict():預(yù)測(cè)測(cè)試集類(lèi)別,參數(shù)為測(cè)試集拧晕。
    大多數(shù)scikit-learn估計(jì)器接收和輸出的數(shù)據(jù)格式均為numpy數(shù)組或類(lèi)似格式隙姿。

1.2 轉(zhuǎn)換器(Transformer)

轉(zhuǎn)換器用于數(shù)據(jù)預(yù)處理和數(shù)據(jù)轉(zhuǎn)換,主要是三個(gè)方法:

  • fit():訓(xùn)練算法防症,設(shè)置內(nèi)部參數(shù)孟辑。
  • transform():數(shù)據(jù)轉(zhuǎn)換。
  • fit_transform():合并fit和transform兩個(gè)方法蔫敲。

1.3 流水線(Pipeline)

sklearn.pipeline

流水線的功能:

  • 跟蹤記錄各步驟的操作(以方便地重現(xiàn)實(shí)驗(yàn)結(jié)果)
  • 對(duì)各步驟進(jìn)行一個(gè)封裝
  • 確保代碼的復(fù)雜程度不至于超出掌控范圍

基本使用方法

流水線的輸入為一連串的數(shù)據(jù)挖掘步驟饲嗽,其中最后一步必須是估計(jì)器,前幾步是轉(zhuǎn)換器奈嘿。輸入的數(shù)據(jù)集經(jīng)過(guò)轉(zhuǎn)換器的處理后貌虾,輸出的結(jié)果作為下一步的輸入。最后裙犹,用位于流水線最后一步的估計(jì)器對(duì)數(shù)據(jù)進(jìn)行分類(lèi)尽狠。
每一步都用元組( ‘名稱’,步驟)來(lái)表示∫镀裕現(xiàn)在來(lái)創(chuàng)建流水線袄膏。

scaling_pipeline = Pipeline([
  ('scale', MinMaxScaler()),
  ('predict', KNeighborsClassifier())
])

1.4 預(yù)處理

主要在sklearn.preprcessing包下。

規(guī)范化:

  • MinMaxScaler :最大最小值規(guī)范化
  • Normalizer :使每條數(shù)據(jù)各特征值的和為1
  • StandardScaler :為使各特征的均值為0掺冠,方差為1

編碼:

  • LabelEncoder :把字符串類(lèi)型的數(shù)據(jù)轉(zhuǎn)化為整型
  • OneHotEncoder :特征用一個(gè)二進(jìn)制數(shù)字來(lái)表示
  • Binarizer :為將數(shù)值型特征的二值化
  • MultiLabelBinarizer:多標(biāo)簽二值化

1.5 特征

1.5.1 特征抽取

包:sklearn.feature_extraction
特征抽取是數(shù)據(jù)挖掘任務(wù)最為重要的一個(gè)環(huán)節(jié)沉馆,一般而言,它對(duì)最終結(jié)果的影響要高過(guò)數(shù)據(jù)挖掘算法本身德崭。只有先把現(xiàn)實(shí)用特征表示出來(lái)斥黑,才能借助數(shù)據(jù)挖掘的力量找到問(wèn)題的答案。特征選擇的另一個(gè)優(yōu)點(diǎn)在于:降低真實(shí)世界的復(fù)雜度眉厨,模型比現(xiàn)實(shí)更容易操縱鸟辅。
一般最常使用的特征抽取技術(shù)都是高度針對(duì)具體領(lǐng)域的槐壳,對(duì)于特定的領(lǐng)域腊尚,如圖像處理,在過(guò)去一段時(shí)間已經(jīng)開(kāi)發(fā)了各種特征抽取的技術(shù)箕慧,但這些技術(shù)在其他領(lǐng)域的應(yīng)用卻非常有限。

  • DictVectorizer: 將dict類(lèi)型的list數(shù)據(jù)茴恰,轉(zhuǎn)換成numpy array
  • FeatureHasher : 特征哈希销钝,相當(dāng)于一種降維技巧
  • image:圖像相關(guān)的特征抽取
  • text: 文本相關(guān)的特征抽取
  • text.CountVectorizer:將文本轉(zhuǎn)換為每個(gè)詞出現(xiàn)的個(gè)數(shù)的向量
  • text.TfidfVectorizer:將文本轉(zhuǎn)換為tfidf值的向量
  • text.HashingVectorizer:文本的特征哈希

示例

data.png

CountVectorize只數(shù)出現(xiàn)個(gè)數(shù)
count.png

hash.png

TfidfVectorizer:個(gè)數(shù)+歸一化(不包括idf)


tfidf(without idf).png

1.5.2 特征選擇

包:sklearn.feature_selection
特征選擇的原因如下:
(1)降低復(fù)雜度
(2)降低噪音
(3)增加模型可讀性

  • VarianceThreshold: 刪除特征值的方差達(dá)不到最低標(biāo)準(zhǔn)的特征
  • SelectKBest: 返回k個(gè)最佳特征
  • SelectPercentile: 返回表現(xiàn)最佳的前r%個(gè)特征

單個(gè)特征和某一類(lèi)別之間相關(guān)性的計(jì)算方法有很多。最常用的有卡方檢驗(yàn)(χ2)琐簇。其他方法還有互信息和信息熵。

  • chi2: 卡方檢驗(yàn)(χ2)

1.6 降維

包:sklearn.decomposition

  • 主成分分析算法(Principal Component Analysis座享, PCA)的目的是找到能用較少信息描述數(shù)據(jù)集的特征組合婉商。它意在發(fā)現(xiàn)彼此之間沒(méi)有相關(guān)性、能夠描述數(shù)據(jù)集的特征渣叛,確切說(shuō)這些特征的方差跟整體方差沒(méi)有多大差距丈秩,這樣的特征也被稱為主成分。這也就意味著淳衙,借助這種方法蘑秽,就能通過(guò)更少的特征捕獲到數(shù)據(jù)集的大部分信息。

1.7 組合

包:**sklearn.ensemble **
組合技術(shù)即通過(guò)聚集多個(gè)分類(lèi)器的預(yù)測(cè)來(lái)提高分類(lèi)準(zhǔn)確率箫攀。
常用的組合分類(lèi)器方法:
(1)通過(guò)處理訓(xùn)練數(shù)據(jù)集肠牲。即通過(guò)某種抽樣分布,對(duì)原始數(shù)據(jù)進(jìn)行再抽樣靴跛,得到多個(gè)訓(xùn)練集缀雳。常用的方法有裝袋(bagging)和提升(boosting)。
(2)通過(guò)處理輸入特征梢睛。即通過(guò)選擇輸入特征的子集形成每個(gè)訓(xùn)練集肥印。適用于有大量冗余特征的數(shù)據(jù)集。隨機(jī)森林(Random forest)就是一種處理輸入特征的組合方法绝葡。
(3)通過(guò)處理類(lèi)標(biāo)號(hào)深碱。適用于多分類(lèi)的情況,將類(lèi)標(biāo)號(hào)隨機(jī)劃分成兩個(gè)不相交的子集藏畅,再把問(wèn)題變?yōu)槎诸?lèi)問(wèn)題敷硅,重復(fù)構(gòu)建多次模型,進(jìn)行分類(lèi)投票墓赴。

  • BaggingClassifier: Bagging分類(lèi)器組合
  • BaggingRegressor: Bagging回歸器組合
  • AdaBoostClassifier: AdaBoost分類(lèi)器組合
  • AdaBoostRegressor: AdaBoost回歸器組合
  • GradientBoostingClassifier:GradientBoosting分類(lèi)器組合
  • GradientBoostingRegressor: GradientBoosting回歸器組合
  • ExtraTreeClassifier:ExtraTree分類(lèi)器組合
  • ExtraTreeRegressor: ExtraTree回歸器組合
  • RandomTreeClassifier:隨機(jī)森林分類(lèi)器組合
  • RandomTreeRegressor: 隨機(jī)森林回歸器組合

使用舉例

AdaBoostClassifier(DecisionTreeClassifier(max_depth=1),
algorithm="SAMME",
n_estimators=200)

解釋
裝袋(bagging):根據(jù)均勻概率分布從數(shù)據(jù)集中重復(fù)抽樣(有放回)竞膳,每個(gè)自助樣本集和原數(shù)據(jù)集一樣大,每個(gè)自助樣本集含有原數(shù)據(jù)集大約63%的數(shù)據(jù)诫硕。訓(xùn)練k個(gè)分類(lèi)器坦辟,測(cè)試樣本被指派到得票最高的類(lèi)。
提升(boosting):通過(guò)給樣本設(shè)置不同的權(quán)值章办,每輪迭代調(diào)整權(quán)值锉走。不同的提升算法之間的差別滨彻,一般是(1)如何更新樣本的權(quán)值,(2)如何組合每個(gè)分類(lèi)器的預(yù)測(cè)挪蹭。其中Adaboost中亭饵,樣本權(quán)值是增加那些被錯(cuò)誤分類(lèi)的樣本的權(quán)值,分類(lèi)器C_i的重要性依賴于它的錯(cuò)誤率梁厉。
Boosting主要關(guān)注降低偏差辜羊,因此Boosting能基于泛化性能相當(dāng)弱的學(xué)習(xí)器構(gòu)建出很強(qiáng)的集成;Bagging主要關(guān)注降低方差词顾,因此它在不剪枝的決策樹(shù)八秃、神經(jīng)網(wǎng)絡(luò)等學(xué)習(xí)器上效用更為明顯。偏差指的是算法的期望預(yù)測(cè)與真實(shí)預(yù)測(cè)之間的偏差程度肉盹,反應(yīng)了模型本身的擬合能力昔驱;方差度量了同等大小的訓(xùn)練集的變動(dòng)導(dǎo)致學(xué)習(xí)性能的變化,刻畫(huà)了數(shù)據(jù)擾動(dòng)所導(dǎo)致的影響上忍。

1.8 模型評(píng)估(度量)

包:sklearn.metrics
sklearn.metrics包含評(píng)分方法骤肛、性能度量、成對(duì)度量和距離計(jì)算窍蓝。
分類(lèi)結(jié)果度量
參數(shù)大多是y_true和y_pred腋颠。

  • accuracy_score:分類(lèi)準(zhǔn)確度
  • condusion_matrix :分類(lèi)混淆矩陣
  • classification_report:分類(lèi)報(bào)告
  • precision_recall_fscore_support:計(jì)算精確度、召回率它抱、f秕豫、支持率
  • jaccard_similarity_score:計(jì)算jcaard相似度
  • hamming_loss:計(jì)算漢明損失
  • zero_one_loss:0-1損失
  • hinge_loss:計(jì)算hinge損失
  • log_loss:計(jì)算log損失

其中,F(xiàn)1是以每個(gè)類(lèi)別為基礎(chǔ)進(jìn)行定義的观蓄,包括兩個(gè)概念:準(zhǔn)確率(precision)和召回率(recall)混移。準(zhǔn)確率是指預(yù)測(cè)結(jié)果屬于某一類(lèi)的個(gè)體,實(shí)際屬于該類(lèi)的比例侮穿。召回率是被正確預(yù)測(cè)為某類(lèi)的個(gè)體歌径,與數(shù)據(jù)集中該類(lèi)個(gè)體總數(shù)的比例。F1是準(zhǔn)確率和召回率的調(diào)和平均數(shù)亲茅。

回歸結(jié)果度量

  • explained_varicance_score:可解釋方差的回歸評(píng)分函數(shù)
  • mean_absolute_error:平均絕對(duì)誤差
  • mean_squared_error:平均平方誤差

多標(biāo)簽的度量

  • coverage_error:涵蓋誤差
  • label_ranking_average_precision_score:計(jì)算基于排名的平均誤差Label ranking average precision (LRAP)

聚類(lèi)的度量

  • adjusted_mutual_info_score:調(diào)整的互信息評(píng)分
  • silhouette_score:所有樣本的輪廓系數(shù)的平均值
  • silhouette_sample:所有樣本的輪廓系數(shù)

1.9 交叉驗(yàn)證

包:sklearn.cross_validation

  • KFold:K-Fold交叉驗(yàn)證迭代器回铛。接收元素個(gè)數(shù)、fold數(shù)克锣、是否清洗
  • LeaveOneOut:LeaveOneOut交叉驗(yàn)證迭代器
  • LeavePOut:LeavePOut交叉驗(yàn)證迭代器
  • LeaveOneLableOut:LeaveOneLableOut交叉驗(yàn)證迭代器
  • LeavePLabelOut:LeavePLabelOut交叉驗(yàn)證迭代器

LeaveOneOut(n) 相當(dāng)于 KFold(n, n_folds=n) 相當(dāng)于LeavePOut(n, p=1)茵肃。
LeaveP和LeaveOne差別在于leave的個(gè)數(shù),也就是測(cè)試集的尺寸袭祟。LeavePLabel和LeaveOneLabel差別在于leave的Label的種類(lèi)的個(gè)數(shù)验残。
LeavePLabel這種設(shè)計(jì)是針對(duì)可能存在第三方的Label,比如我們的數(shù)據(jù)是一些季度的數(shù)據(jù)巾乳。那么很自然的一個(gè)想法就是把1,2,3個(gè)季度的數(shù)據(jù)當(dāng)做訓(xùn)練集您没,第4個(gè)季度的數(shù)據(jù)當(dāng)做測(cè)試集鸟召。這個(gè)時(shí)候只要輸入每個(gè)樣本對(duì)應(yīng)的季度Label,就可以實(shí)現(xiàn)這樣的功能氨鹏。
以下是實(shí)驗(yàn)代碼欧募,盡量自己多實(shí)驗(yàn)去理解。

#coding=utf-8
import numpy as np
import sklearnfrom sklearn
import cross_validation
X = np.array([[1, 2], [3, 4], [5, 6], [7, 8],[9, 10]])
y = np.array([1, 2, 1, 2, 3])
def show_cross_val(method):    
  if method == "lolo":        
    labels = np.array(["summer", "winter", "summer", "winter", "spring"])        
    cv = cross_validation.LeaveOneLabelOut(labels)          
  elif method == 'lplo':        
    labels = np.array(["summer", "winter", "summer", "winter", "spring"])        
    cv = cross_validation.LeavePLabelOut(labels,p=2)    
  elif method == 'loo':        
    cv = cross_validation.LeaveOneOut(n=len(y))    
  elif method == 'lpo':        
    cv = cross_validation.LeavePOut(n=len(y),p=3)    
  for train_index, test_index in cv:        
    print("TRAIN:", train_index, "TEST:", test_index)        
    X_train, X_test = X[train_index], X[test_index]        
    y_train, y_test = y[train_index], y[test_index]        
    print "X_train: ",X_train        
    print "y_train: ", y_train        
    print "X_test: ",X_test        
    print "y_test: ",y_test
if __name__ == '__main__':    
  show_cross_val("lpo")

常用方法

  • train_test_split:分離訓(xùn)練集和測(cè)試集(不是K-Fold)
  • cross_val_score:交叉驗(yàn)證評(píng)分仆抵,可以指認(rèn)cv為上面的類(lèi)的實(shí)例
  • cross_val_predict:交叉驗(yàn)證的預(yù)測(cè)跟继。

1.10 網(wǎng)格搜索

包:sklearn.grid_search
網(wǎng)格搜索最佳參數(shù)

  • GridSearchCV:搜索指定參數(shù)網(wǎng)格中的最佳參數(shù)
  • ParameterGrid:參數(shù)網(wǎng)格
  • ParameterSampler:用給定分布生成參數(shù)的生成器
  • RandomizedSearchCV:超參的隨機(jī)搜索
    通過(guò)best_estimator_.get_params()方法,獲取最佳參數(shù)镣丑。

1.11 多分類(lèi)还栓、多標(biāo)簽分類(lèi)

包:sklearn.multiclass

  • OneVsRestClassifier:1-rest多分類(lèi)(多標(biāo)簽)策略
  • OneVsOneClassifier:1-1多分類(lèi)策略
  • OutputCodeClassifier:1個(gè)類(lèi)用一個(gè)二進(jìn)制碼表示
    示例代碼
#coding=utf-8
from sklearn import metrics
from sklearn import cross_validation
from sklearn.svm import SVC
from sklearn.multiclass import OneVsRestClassifier
from sklearn.preprocessing import MultiLabelBinarizer
import numpy as np
from numpy import random
X=np.arange(15).reshape(5,3)
y=np.arange(5)
Y_1 = np.arange(5)
random.shuffle(Y_1)
Y_2 = np.arange(5)
random.shuffle(Y_2)
Y = np.c_[Y_1,Y_2]
def multiclassSVM():
    X_train, X_test, y_train, y_test = cross_validation.train_test_split(X, y, test_size=0.2,random_state=0)
    model = OneVsRestClassifier(SVC())
    model.fit(X_train, y_train)
    predicted = model.predict(X_test)
    print predicted
def multilabelSVM():
    Y_enc = MultiLabelBinarizer().fit_transform(Y)
    X_train, X_test, Y_train, Y_test = cross_validation.train_test_split(X, Y_enc, test_size=0.2, random_state=0)
    model = OneVsRestClassifier(SVC())
    model.fit(X_train, Y_train)
    predicted = model.predict(X_test)
    print predicted
if __name__ == '__main__':
    multiclassSVM()
    # multilabelSVM()

上面的代碼測(cè)試了svm在OneVsRestClassifier的包裝下,分別處理多分類(lèi)和多標(biāo)簽的情況传轰。特別注意,在多標(biāo)簽的情況下谷婆,輸入必須是二值化的慨蛙。所以需要MultiLabelBinarizer()先處理。

2 具體模型

2.1 樸素貝葉斯(Naive Bayes)

包:sklearn.cross_validation

樸素貝葉斯.png

樸素貝葉斯的特點(diǎn)是分類(lèi)速度快纪挎,分類(lèi)效果不一定是最好的期贫。

  • GasussianNB:高斯分布的樸素貝葉斯
  • MultinomialNB:多項(xiàng)式分布的樸素貝葉斯
  • BernoulliNB:伯努利分布的樸素貝葉斯

所謂使用什么分布的樸素貝葉斯,就是假設(shè)P(x_i|y)是符合哪一種分布异袄,比如可以假設(shè)其服從高斯分布通砍,然后用最大似然法估計(jì)高斯分布的參數(shù)。

高斯分布.png
多項(xiàng)式分布.png
伯努利分布.png

3 scikit-learn擴(kuò)展

3.0 概覽

具體的擴(kuò)展烤蜕,通常要繼承sklearn.base包下的類(lèi)封孙。

  • BaseEstimator: 估計(jì)器的基類(lèi)
  • ClassifierMixin :分類(lèi)器的混合類(lèi)
  • ClusterMixin:聚類(lèi)器的混合類(lèi)
  • RegressorMixin :回歸器的混合類(lèi)
  • TransformerMixin :轉(zhuǎn)換器的混合類(lèi)

關(guān)于什么是Mixin(混合類(lèi)),具體可以看這個(gè)知乎鏈接讽营。簡(jiǎn)單地理解虎忌,就是帶有實(shí)現(xiàn)方法的接口,可以將其看做是組合模式的一種實(shí)現(xiàn)橱鹏。舉個(gè)例子膜蠢,比如說(shuō)常用的TfidfTransformer,繼承了BaseEstimator莉兰, TransformerMixin挑围,因此它的基本功能就是單一職責(zé)的估計(jì)器和轉(zhuǎn)換器的組合。

3.1 創(chuàng)建自己的轉(zhuǎn)換器

在特征抽取的時(shí)候糖荒,經(jīng)常會(huì)發(fā)現(xiàn)自己的一些數(shù)據(jù)預(yù)處理的方法杉辙,sklearn里可能沒(méi)有實(shí)現(xiàn),但若直接在數(shù)據(jù)上改寂嘉,又容易將代碼弄得混亂奏瞬,難以重現(xiàn)實(shí)驗(yàn)枫绅。這個(gè)時(shí)候最好自己創(chuàng)建一個(gè)轉(zhuǎn)換器,在后面將這個(gè)轉(zhuǎn)換器放到pipeline里硼端,統(tǒng)一管理并淋。
例如《Python數(shù)據(jù)挖掘入門(mén)與實(shí)戰(zhàn)》書(shū)中的例子,我們想接收一個(gè)numpy數(shù)組珍昨,根據(jù)其均值將其離散化县耽,任何高于均值的特征值替換為1,小于或等于均值的替換為0镣典。
代碼實(shí)現(xiàn):

from sklearn.base import TransformerMixin
from sklearn.utils import as_float_array

class MeanDiscrete(TransformerMixin):
  
  #計(jì)算出數(shù)據(jù)集的均值兔毙,用內(nèi)部變量保存該值。  
  def fit(self, X, y=None):
        X = as_float_array(X)
        self.mean = np.mean(X, axis=0)
        #返回self兄春,確保在轉(zhuǎn)換器中能夠進(jìn)行鏈?zhǔn)秸{(diào)用(例如調(diào)用transformer.fit(X).transform(X))
        return self

    def transform(self, X):
        X = as_float_array(X)
        assert X.shape[1] == self.mean.shape[0]
        return X > self.mean
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末澎剥,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赶舆,更是在濱河造成了極大的恐慌哑姚,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件芜茵,死亡現(xiàn)場(chǎng)離奇詭異叙量,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)九串,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)绞佩,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人猪钮,你說(shuō)我怎么就攤上這事品山。” “怎么了烤低?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵谆奥,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我拂玻,道長(zhǎng)酸些,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任檐蚜,我火速辦了婚禮魄懂,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闯第。我一直安慰自己市栗,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著填帽,像睡著了一般蛛淋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上篡腌,一...
    開(kāi)封第一講書(shū)人閱讀 51,610評(píng)論 1 305
  • 那天褐荷,我揣著相機(jī)與錄音,去河邊找鬼嘹悼。 笑死叛甫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的杨伙。 我是一名探鬼主播其监,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼限匣!你這毒婦竟也來(lái)了抖苦?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤米死,失蹤者是張志新(化名)和其女友劉穎睛约,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體哲身,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年贸伐,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了勘天。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡捉邢,死狀恐怖脯丝,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情伏伐,我是刑警寧澤宠进,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站藐翎,受9級(jí)特大地震影響材蹬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜吝镣,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一堤器、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧末贾,春花似錦闸溃、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)表蝙。三九已至,卻和暖如春乓旗,著一層夾襖步出監(jiān)牢的瞬間府蛇,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工寸齐, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留欲诺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓渺鹦,卻偏偏與公主長(zhǎng)得像扰法,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子毅厚,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355

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