Python機(jī)器學(xué)習(xí)庫SKLearn:數(shù)據(jù)集轉(zhuǎn)換之預(yù)處理數(shù)據(jù)2018-04-22

轉(zhuǎn)自:https://blog.csdn.net/cheng9981/article/details/61650879
http://scikit-learn.org/stable/modules/preprocessing.html#standardization-or-mean-removal-and-variance-scaling
數(shù)據(jù)集轉(zhuǎn)換之預(yù)處理數(shù)據(jù):
將輸入的數(shù)據(jù)轉(zhuǎn)化成機(jī)器學(xué)習(xí)算法可以使用的數(shù)據(jù)存捺。包含特征提取和標(biāo)準(zhǔn)化城丧。
原因:數(shù)據(jù)集的標(biāo)準(zhǔn)化(服從均值為0方差為1的標(biāo)準(zhǔn)正態(tài)分布(高斯分布))是大多數(shù)機(jī)器學(xué)習(xí)算法的常見要求。

  如果原始數(shù)據(jù)不服從高斯分布杭隙,在預(yù)測時表現(xiàn)可能不好。在實踐中淌山,我們經(jīng)常進(jìn)行標(biāo)準(zhǔn)化(z-score 特征減去均值/標(biāo)準(zhǔn)差)椭岩。

1.1 標(biāo)準(zhǔn)正態(tài)分布(均值為0,方差為1) Scale函數(shù)的使用 對列進(jìn)行z-score

from sklearn import preprocessing  
import numpy as np  
#1言缤、數(shù)據(jù)標(biāo)準(zhǔn)化    
  
X = np.array([[ 1., -1.,  2.],  
             [ 2.,  0.,  0.],  
             [ 0.,  1., -1.]])  
X_scaled = preprocessing.scale(X)  
X_scaled  
""" 
輸出標(biāo)準(zhǔn)化的結(jié)果: 
array([[ 0.        , -1.22474487,  1.33630621], 
       [ 1.22474487,  0.        , -0.26726124], 
       [-1.22474487,  1.22474487, -1.06904497]]) 
"""  
X_scaled.mean(axis=0) #用于計算均值和標(biāo)準(zhǔn)偏差的軸。如果為0禁灼,獨立規(guī)范每個特征管挟,否則(如果為1)標(biāo)準(zhǔn)化每個樣品。  
""" 
輸出歸一化后的均值: 
array([ 0.,  0.,  0.]) 
"""  
X_scaled.std(axis=0)  
""" 
輸出標(biāo)準(zhǔn)化后的標(biāo)準(zhǔn)差: 
array([ 1.,  1.,  1.]) 
"""

1.2 預(yù)處理模塊StandardScaler

其實現(xiàn)Transformer API以計算訓(xùn)練集上的平均值和標(biāo)準(zhǔn)偏差弄捕,以便以后能夠在測試集上重新應(yīng)用相同的變換僻孝。

#StandardScaler()的參數(shù)  
""" 
StandardScaler() 的參數(shù)with_mean 默認(rèn)為True 表示使用密集矩陣,使用稀疏矩陣則會報錯 守谓,with_mean= False 適用于稀疏矩陣 
with_std 默認(rèn)為True 如果為True穿铆,則將數(shù)據(jù)縮放為單位方差(單位標(biāo)準(zhǔn)偏差) 
copy 默認(rèn)為True 如果為False,避免產(chǎn)生一個副本分飞,并執(zhí)行inplace縮放悴务。 如果數(shù)據(jù)不是NumPy數(shù)組或scipy.sparse CSR矩陣,則仍可能返回副本 
"""  
scaler = preprocessing.StandardScaler().fit(X)   
scaler  
""" 
輸出: 
StandardScaler(copy=True, with_mean=True, with_std=True) 
"""  
#StandardScaler()的屬性  
scaler.mean_   
""" 
輸出X(原數(shù)據(jù))每列的均值: 
array([ 1.        ,  0.        ,  0.33333333]) 
"""  
scaler.scale_  
""" 
輸出X(原數(shù)據(jù))每列的標(biāo)準(zhǔn)差(標(biāo)準(zhǔn)偏差): 
array([ 0.81649658,  0.81649658,  1.24721913]) 
"""  
scaler.var_  
""" 
輸出X(原數(shù)據(jù))每列的方差: 
array([ 0.66666667,  0.66666667,  1.55555556]) 
"""  
#StandardScaler()的方法  
scaler.transform(X)   
""" 
輸出X(原數(shù)據(jù))標(biāo)準(zhǔn)化(z-score): 
rray([[ 0.        , -1.22474487,  1.33630621], 
       [ 1.22474487,  0.        , -0.26726124], 
       [-1.22474487,  1.22474487, -1.06904497]]) 
"""  
#  StandardScaler().fit(X) 輸入數(shù)據(jù)用于計算以后縮放的平均值和標(biāo)準(zhǔn)差  
#  StandardScaler().fit_transform(X)輸入數(shù)據(jù),然后轉(zhuǎn)換它  
scaler.get_params() #獲取此估計量的參數(shù)  
""" 
輸出: 
{'copy': True, 'with_mean': True, 'with_std': True} 
"""  
scaler.inverse_transform(scaler.transform(X))#將標(biāo)準(zhǔn)化后的數(shù)據(jù)轉(zhuǎn)換成原來的數(shù)據(jù)  
""" 
輸出: 
array([[ 1., -1.,  2.], 
       [ 2.,  0.,  0.], 
       [ 0.,  1., -1.]]) 
"""  
#scaler.partial_fit(X) 在X縮放以后 在線計算平均值和std  
#scaler.set_params(with_mean=False)設(shè)置此估計量的參數(shù)  

2讯檐、歸一化 將特征縮放到一個范圍內(nèi)(0羡疗,1)
縮放特征到給定的最小值到最大值之間,通常在0到1之間别洪∵逗蓿或則使得每個特征的最大絕對值被縮放到單位大小。這可以分別使用MinMaxScaler或MaxAbsScaler函數(shù)實現(xiàn)挖垛。

""" 
#訓(xùn)練集數(shù)據(jù) 例如縮放到[0-1] 
"""  
MinMaxScaler 參數(shù)feature_range=(0, 1)數(shù)據(jù)集的分布范圍, copy=True 副本  
計算公式如下:  
X_std = (X - X.min(axis=0)) / (X.max(axis=0) - X.min(axis=0))  
X_scaled = X_std * (max - min) + min  
""" 
 
X_train = np.array([[ 1., -1.,  2.], 
                   [ 2.,  0.,  0.], 
                   [ 0.,  1., -1.]]) 
min_max_scaler = preprocessing.MinMaxScaler() 
X_train_minmax = min_max_scaler.fit_transform(X_train) 
X_train_minmax 
"""  
輸出訓(xùn)練集:  
array([[ 0.5       ,  0.        ,  1.        ],  
       [ 1.        ,  0.5       ,  0.33333333],  
       [ 0.        ,  1.        ,  0.        ]])  
""" 
#測試集數(shù)據(jù) 
X_test = np.array([[ -3., -1.,  4.]]) 
X_test_minmax = min_max_scaler.transform(X_test) 
X_test_minmax 
"""  
輸出測試集:  
array([[-1.5       ,  0.        ,  1.66666667]])  
""" 
"""  
MaxAbsScaler 通過其最大絕對值來縮放每個特征,范圍在[-1,1]痒钝。它用于已經(jīng)以零或稀疏數(shù)據(jù)為中心的數(shù)據(jù),應(yīng)用于稀疏CSR或CSC矩陣痢毒。  
X_std = X/每列的最大絕對值  
""" 
X_train = np.array([[ 1., -1.,  2.], 
                   [ 2.,  0.,  0.], 
                   [ 0.,  1., -1.]]) 
max_abs_scaler = preprocessing.MaxAbsScaler() 
X_train_maxabs = max_abs_scaler.fit_transform(X_train) 
X_train_maxabs 
"""  
輸出訓(xùn)練集:  
array([[ 0.5, -1. ,  1. ],  
       [ 1. ,  0. ,  0. ],  
       [ 0. ,  1. , -0.5]])  
""" 
max_abs_scaler.scale_   
"""  
輸出訓(xùn)練集的縮放數(shù)據(jù):  
array([ 2.,  1.,  2.])  
""" 
 
X_test = np.array([[ -3., -1.,  4.]]) 
X_test_maxabs = max_abs_scaler.transform(X_test) 
X_test_maxabs  
"""  
輸出測試集:  
array([[-1.5, -1. ,  2. ]])  
"""  

3送矩、關(guān)于稀疏矩陣
MaxAbsScaler和maxabs_scale是專門為縮放稀疏數(shù)據(jù)而設(shè)計的。scale和StandardScaler可以接受scipy.sparse矩陣作為輸入哪替,只要將with_mean = False顯式傳遞給構(gòu)造函數(shù)即可栋荸。否則,將拋出ValueError凭舶,因為靜默中心將打破稀疏性晌块,并且通常會由于無意分配過多的內(nèi)存而導(dǎo)致執(zhí)行崩潰。RobustScaler不能適用于稀疏輸入帅霜,但是您可以對稀疏輸入使用變換方法匆背。
請注意,縮放器接受壓縮的稀疏行和壓縮的稀疏列的格式(請參閱scipy.sparse.csr_matrix和scipy.sparse.csc_matrix)身冀。任何其他稀疏輸入將被轉(zhuǎn)換為壓縮稀疏行表示钝尸。為了避免不必要的內(nèi)存復(fù)制,建議選擇CSR或CSC表示闽铐。最后蝶怔,如果中心數(shù)據(jù)預(yù)期足夠小,使用稀疏矩陣的toarray方法將輸入顯式轉(zhuǎn)換為數(shù)組是另一個好的選擇兄墅。

4 縮放具有異常值的數(shù)據(jù)
如果您的數(shù)據(jù)包含許多異常值,使用數(shù)據(jù)的均值和方差的縮放可能無法很好地工作澳叉。在這些情況下隙咸,您可以使用robust_scale和RobustScaler作為替代替換。 它們對數(shù)據(jù)的中心和范圍使用更穩(wěn)健的估計成洗∥宥剑可以使用sklearn.decomposition.PCA或sklearn.decomposition.RandomizedPCA與whiten = True進(jìn)一步刪除特征之間的線性相關(guān)。

5 瓶殃、歸一化
歸一化是縮放單個樣本以具有單位范數(shù)的過程充包。 如果您計劃使用二次形式(如點積或任何其他內(nèi)核)來量化任何樣本對的相似性,則此過程可能很有用。這個假設(shè)基于經(jīng)常被用于文本分類和聚類上下文的空間向量模型上基矮。函數(shù)normalize提供了一個快速和簡單的方法來在單個數(shù)組類數(shù)據(jù)集上執(zhí)行此操作淆储,使用l1或l2范數(shù)。

X = [[ 1., -1.,  2.],  
    [ 2.,  0.,  0.],  
     [ 0.,  1., -1.]]  
X_normalized = preprocessing.normalize(X, norm='l2')  
X_normalized  
""" 
輸出l2歸一化: 
array([[ 0.40824829, -0.40824829,  0.81649658], 
       [ 1.        ,  0.        ,  0.        ], 
       [ 0.        ,  0.70710678, -0.70710678]]) 
"""  

預(yù)處理模塊還提供了一個實用類Normalizer家浇,它使用Transformer API實現(xiàn)相同的操作(其中fit方法無用本砰,因為該操作獨立處理樣本)。transform(X[, y, copy])將X的每個非零行縮放為單位范數(shù)钢悲。單獨歸一化樣本為單位標(biāo)準(zhǔn)点额,具有至少一個非零分量的每個樣本(即數(shù)據(jù)矩陣的每一行)獨立于其他樣本被重新縮放,使得其范數(shù)(l1或l2)等于1莺琳。
能夠使用密集numpy數(shù)組和scipy.sparse矩陣(如果避免復(fù)制/轉(zhuǎn)換还棱,使用CSR格式)。 例如文本分類或聚類的常見操作惭等。 例如珍手,兩個l2歸一化的TF-IDF向量的點積是向量的余弦相似性,并且是信息檢索團(tuán)體通常使用的向量空間模型的基本相似性度量咕缎。

normalizer = preprocessing.Normalizer(norm='l1').fit(X)  # fit 無用  
normalizer.transform(X)   
""" 
輸出: 
array([[ 0.25, -0.25,  0.5 ], 
       [ 1.  ,  0.  ,  0.  ], 
       [ 0.  ,  0.5 , -0.5 ]]) 
"""  

6 珠十、二值化
6.1 特征二值化
特征二值化是將數(shù)值特征閾值化以獲得布爾值的過程。 這對于假設(shè)輸入數(shù)據(jù)根據(jù)多變量伯努利分布而分布的下游概率估計器可能是有用的凭豪。例如焙蹭,這是sklearn.neural_network.BernoulliRBM 的情況。在文本處理中經(jīng)常使用二值特征(可能簡化概率推理)嫂伞,即使歸一化計數(shù)(也稱為詞項頻率)或TF-IDF值特征在實踐中經(jīng)常表現(xiàn)得更好孔厉。二元化和二元化接受來自scipy.sparse的密集陣列樣和稀疏矩陣作為輸入。對于稀疏輸入帖努,數(shù)據(jù)將轉(zhuǎn)換為壓縮稀疏行表示形式(請參閱scipy.sparse.csr_matrix)撰豺。為了避免不必要的內(nèi)存復(fù)制,建議選擇CSR拼余。

X = [[ 1., -1.,  2.],  
      [ 2.,  0.,  0.],  
     [ 0.,  1., -1.]]  
  
binarizer = preprocessing.Binarizer().fit(X)  # fit does nothing  
binarizer  
""" 
輸出: 
Binarizer(copy=True, threshold=0.0) 
"""  
binarizer.transform(X)  
""" 
輸出: 
array([[ 1.,  0.,  1.], 
       [ 1.,  0.,  0.], 
       [ 0.,  1.,  0.]]) 
"""  
#可以調(diào)整二值化器的閾值  
binarizer = preprocessing.Binarizer(threshold=1.1)  
binarizer.transform(X)  
""" 
輸出: 
array([[ 0.,  0.,  1.], 
       [ 1.,  0.,  0.], 
       [ 0.,  0.,  0.]]) 
"""  

7污桦、分類特征編碼

通常來說,特征不都是連續(xù)的值而是由分類給出的匙监。例如凡橱,一個人可以具有如下特征:
["male", "female"]
["from Europe", "from US", "from Asia"]
["uses Firefox", "uses Chrome", "uses Safari", "uses Internet Explorer"]
這樣的特征可以被有效地整合在一起然后進(jìn)行編碼,比如:
["male", "from US", "uses Internet Explorer"] 可以用[0, 1, 3]表示
["female", "from Asia", "uses Chrome"] 可以用[1, 2, 1]表示
但是亭姥,這樣的表示不能用于Sklearn進(jìn)行估計稼钩,因為離散(分類)特征,將特征值轉(zhuǎn)化成數(shù)字時往往是不連續(xù)的达罗。OneHotEncoder函數(shù)通過one-of-K (k之一)和 one-hot(獨熱)編碼來解決這個問題坝撑。

enc = preprocessing.OneHotEncoder()  
enc.fit([[0, 0, 3], [1, 1, 0], [0, 2, 1], [1, 0, 2]])   
""" 
輸出: 
OneHotEncoder(categorical_features='all', dtype=<class 'float'>, 
       handle_unknown='error', n_values='auto', sparse=True) 
"""  
enc.transform([[0, 1, 3]]).toarray()  
""" 
輸出: 
array([[ 1.,  0.,  0.,  1.,  0.,  0.,  0.,  0.,  1.]]) 
"""  
  
""" 
    默認(rèn)情況下,每個要素可以自動從數(shù)據(jù)集中推斷出多少值⊙怖睿可以使用參數(shù)n_values顯式地指定它抚笔。 
    在我們的數(shù)據(jù)集中有兩個性別,三個可能的大陸和四個網(wǎng)絡(luò)瀏覽器击儡。然后我們擬合估計器塔沃,并變換數(shù)據(jù)點。 
結(jié)果:前兩個數(shù)字編碼性別阳谍,三個數(shù)字的大陸和四個數(shù)字的為網(wǎng)絡(luò)瀏覽器蛀柴。 
"""  
#注意,如果存在訓(xùn)練數(shù)據(jù)可能缺少分類特征的可能性矫夯,則必須顯式地設(shè)置n_value鸽疾。例如,  
enc = preprocessing.OneHotEncoder(n_values=[2, 3, 4])  
#請注意训貌,第2個和第3個特征缺少分類值 第一個特征不缺少(有0制肮,1)  
enc.fit([[1, 2, 3], [0, 2, 0]])  
""" 
輸出: 
OneHotEncoder(categorical_features='all', dtype=<class 'float'>, 
       handle_unknown='error', n_values=[2, 3, 4], sparse=True) 
"""  
enc.transform([[1, 0, 0]]).toarray()  
""" 
輸出: 
array([[ 0.,  1.,  1.,  0.,  0.,  1.,  0.,  0.,  0.]]) 
"""  

8 缺失值的插補(bǔ)
由于各種原因,許多現(xiàn)實世界數(shù)據(jù)集包含缺失值递沪,通常編碼為空白豺鼻,NaN或其他占位符。然而款慨,這樣的數(shù)據(jù)集與scikit-learn估計器不兼容儒飒,scikit-learn估計器假定數(shù)組中的所有值都是數(shù)字的,并且都具有和保持意義檩奠。使用不完整數(shù)據(jù)集的基本策略是丟棄包含缺少值的整個行和/或列桩了。然而,這是以丟失可能有價值的數(shù)據(jù)(即使不完全)為代價埠戳。一個更好的策略是插補(bǔ)缺失值井誉,即從數(shù)據(jù)的已知部分推斷它們。 Imputer類提供了輸入缺失值的基本策略整胃,使用缺失值所在的行或列的平均值颗圣,中值或最常見的值。這個類還允許不同的缺失值編碼屁使。

#以下代碼段演示了如何使用包含缺少值的列(軸0)的平均值替換編碼為np.nan的缺失值:  
import numpy as np  
from sklearn.preprocessing import Imputer  
imp = Imputer(missing_values='NaN', strategy='mean', axis=0) # missing_values:integer/“NaN”, strategy:mean/median/most_frequent  
imp.fit([[1, 2], [np.nan, 3], [7, 6]])  
""" 
輸出: 
Imputer(axis=0, copy=True, missing_values='NaN', strategy='mean', verbose=0) 
"""  
X = [[np.nan, 2], [6, np.nan], [7, 6]]  
imp.transform(X)  
""" 
輸出: 
array([[ 4.        ,  2.        ], 
       [ 6.        ,  3.66666667], 
       [ 7.        ,  6.        ]]) 
"""  
#Imputer類還支持稀疏矩陣:  
import scipy.sparse as sp  
X = sp.csc_matrix([[1, 2], [0, 3], [7, 6]])  
imp = Imputer(missing_values=0, strategy='mean', axis=0)  
imp.fit(X)  
""" 
Imputer(axis=0, copy=True, missing_values=0, strategy='mean', verbose=0) 
"""  
X_test = sp.csc_matrix([[0, 2], [6, 0], [7, 6]])  
imp.transform(X_test)  
""" 
輸出: 
array([[ 4.        ,  2.        ], 
       [ 6.        ,  3.66666667], 
       [ 7.        ,  6.        ]]) 
""" 

9 生成多項式特征
通常欠啤,通過考慮輸入數(shù)據(jù)的非線性特征來增加模型的復(fù)雜性是有用的。使用的一種簡單和常見的方法是多項式特征屋灌,其可以獲得特征的高階和交互項。它在PolynomialFeatures中實現(xiàn)应狱。注意共郭,當(dāng)使用多項式核函數(shù)時,多項式特征在內(nèi)核方法(例如,sklearn.svm.SVC除嘹,sklearn.decomposition.KernelPCA)中被隱含地使用写半。

from sklearn.preprocessing import PolynomialFeatures  
X = np.arange(6).reshape(3, 2)  
X  
""" 
輸出: 
array([[0, 1], 
       [2, 3], 
       [4, 5]]) 
"""  
poly = PolynomialFeatures(2)  
poly.fit_transform(X)          
""" 
輸出: 
array([[  1.,   0.,   1.,   0.,   0.,   1.], 
       [  1.,   2.,   3.,   4.,   6.,   9.], 
       [  1.,   4.,   5.,  16.,  20.,  25.]]) 
        
從X(X_1, X_2) 到X(1, X_1, X_2, X_1^2, X_1X_2, X_2^2). 
"""  
  
#在某些情況下,只需要特征之間的交互項尉咕,并且可以通過設(shè)置獲得  
X = np.arange(9).reshape(3, 3)  
X     
""" 
輸出: 
array([[0, 1, 2], 
       [3, 4, 5], 
       [6, 7, 8]]) 
"""  
poly = PolynomialFeatures(degree=3, interaction_only=True)  
poly.fit_transform(X)   
""" 
輸出: 
array([[   1.,    0.,    1.,    2.,    0.,    0.,    2.,    0.], 
       [   1.,    3.,    4.,    5.,   12.,   15.,   20.,   60.], 
       [   1.,    6.,    7.,    8.,   42.,   48.,   56.,  336.]]) 
        
從(X_1, X_2, X_3) 到 (1, X_1, X_2, X_3, X_1X_2, X_1X_3, X_2X_3, X_1X_2X_3). 
"""  

10 自定義轉(zhuǎn)化器

from sklearn.preprocessing import FunctionTransformer  
transformer = FunctionTransformer(np.log1p)  
X = np.array([[0, 1], [2, 3]])  
transformer.transform(X)  
""" 
輸出: 
array([[ 0.        ,  0.69314718], 
       [ 1.09861229,  1.38629436]]) 
"""
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末叠蝇,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子年缎,更是在濱河造成了極大的恐慌悔捶,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件单芜,死亡現(xiàn)場離奇詭異蜕该,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)洲鸠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門堂淡,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扒腕,你說我怎么就攤上這事绢淀。” “怎么了瘾腰?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵皆的,是天一觀的道長。 經(jīng)常有香客問我居灯,道長祭务,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任怪嫌,我火速辦了婚禮义锥,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘岩灭。我一直安慰自己拌倍,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布噪径。 她就那樣靜靜地躺著柱恤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪找爱。 梳的紋絲不亂的頭發(fā)上梗顺,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機(jī)與錄音车摄,去河邊找鬼寺谤。 笑死仑鸥,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的变屁。 我是一名探鬼主播眼俊,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼粟关!你這毒婦竟也來了疮胖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤闷板,失蹤者是張志新(化名)和其女友劉穎澎灸,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蛔垢,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡击孩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了鹏漆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巩梢。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖艺玲,靈堂內(nèi)的尸體忽然破棺而出括蝠,到底是詐尸還是另有隱情,我是刑警寧澤饭聚,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布忌警,位于F島的核電站,受9級特大地震影響秒梳,放射性物質(zhì)發(fā)生泄漏法绵。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一酪碘、第九天 我趴在偏房一處隱蔽的房頂上張望朋譬。 院中可真熱鬧,春花似錦兴垦、人聲如沸徙赢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狡赐。三九已至,卻和暖如春钦幔,著一層夾襖步出監(jiān)牢的瞬間枕屉,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工鲤氢, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留搀庶,地道東北人拐纱。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像哥倔,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子揍庄,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,927評論 2 355

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