數(shù)據(jù)挖掘:分類與回歸中的數(shù)據(jù)預處理與清洗教程_第1頁
數(shù)據(jù)挖掘:分類與回歸中的數(shù)據(jù)預處理與清洗教程_第2頁
數(shù)據(jù)挖掘:分類與回歸中的數(shù)據(jù)預處理與清洗教程_第3頁
數(shù)據(jù)挖掘:分類與回歸中的數(shù)據(jù)預處理與清洗教程_第4頁
數(shù)據(jù)挖掘:分類與回歸中的數(shù)據(jù)預處理與清洗教程_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領

文檔簡介

數(shù)據(jù)挖掘:分類與回歸中的數(shù)據(jù)預處理與清洗教程1數(shù)據(jù)預處理與清洗基礎1.1數(shù)據(jù)預處理的重要性數(shù)據(jù)預處理是數(shù)據(jù)挖掘過程中的關鍵步驟,它直接影響到模型的性能和預測的準確性。在進行分類或回歸分析之前,數(shù)據(jù)往往需要經(jīng)過一系列的預處理操作,以確保數(shù)據(jù)的質(zhì)量和適用性。數(shù)據(jù)預處理的重要性主要體現(xiàn)在以下幾個方面:數(shù)據(jù)清洗:去除數(shù)據(jù)中的噪聲和無關信息,如處理缺失值、異常值和重復數(shù)據(jù)。數(shù)據(jù)轉(zhuǎn)換:將數(shù)據(jù)轉(zhuǎn)換為適合模型的形式,如數(shù)據(jù)標準化、歸一化和編碼。數(shù)據(jù)集成:將來自不同來源的數(shù)據(jù)合并,解決數(shù)據(jù)不一致性和冗余問題。數(shù)據(jù)約簡:減少數(shù)據(jù)的維度或數(shù)量,以提高模型的效率和解釋性。1.1.1示例:處理缺失值假設我們有一個數(shù)據(jù)集,其中包含一些缺失值,我們使用Python的pandas庫來處理這些缺失值。importpandasaspd

#創(chuàng)建一個包含缺失值的數(shù)據(jù)框

data={'年齡':[25,30,None,35],

'收入':[50000,60000,70000,None],

'性別':['男','女','男','女']}

df=pd.DataFrame(data)

#使用平均值填充年齡列的缺失值

df['年齡'].fillna(df['年齡'].mean(),inplace=True)

#使用眾數(shù)填充收入列的缺失值

df['收入'].fillna(df['收入'].mode()[0],inplace=True)

#查看處理后的數(shù)據(jù)框

print(df)1.1.2示例:數(shù)據(jù)標準化數(shù)據(jù)標準化是將數(shù)據(jù)轉(zhuǎn)換為具有相同尺度的過程,這對于許多機器學習算法來說是必要的。我們使用scikit-learn庫中的StandardScaler來標準化數(shù)據(jù)。fromsklearn.preprocessingimportStandardScaler

importnumpyasnp

#創(chuàng)建一個數(shù)據(jù)集

data=np.array([[1,2],[3,4],[5,6],[7,8]])

#創(chuàng)建StandardScaler對象

scaler=StandardScaler()

#擬合并轉(zhuǎn)換數(shù)據(jù)

data_scaled=scaler.fit_transform(data)

#打印標準化后的數(shù)據(jù)

print(data_scaled)1.2數(shù)據(jù)清洗的基本概念數(shù)據(jù)清洗是數(shù)據(jù)預處理的一部分,主要目標是提高數(shù)據(jù)質(zhì)量,確保數(shù)據(jù)的準確性和一致性。數(shù)據(jù)清洗涉及的活動包括:檢測和處理缺失值:缺失值可能由于各種原因產(chǎn)生,如數(shù)據(jù)收集過程中的錯誤或遺漏。處理缺失值的方法包括刪除、填充(如使用平均值、中位數(shù)或眾數(shù))或預測缺失值。識別和處理異常值:異常值是數(shù)據(jù)集中顯著偏離其他值的觀測值。處理異常值的方法包括刪除、修正或使用統(tǒng)計方法進行調(diào)整。消除重復數(shù)據(jù):重復數(shù)據(jù)可能導致模型過擬合或預測偏差。消除重復數(shù)據(jù)通常涉及識別和刪除重復的記錄。數(shù)據(jù)一致性檢查:確保數(shù)據(jù)在不同字段或記錄之間的一致性,如日期格式、單位或編碼的一致性。1.2.1示例:識別異常值我們使用Python的pandas庫和scikit-learn庫來識別數(shù)據(jù)集中的異常值。importpandasaspd

fromsklearn.covarianceimportEllipticEnvelope

#創(chuàng)建一個數(shù)據(jù)集

data={'年齡':[25,30,35,40,45,50,55,60,65,1000],

'收入':[50000,60000,70000,80000,90000,100000,110000,120000,130000,140000]}

df=pd.DataFrame(data)

#創(chuàng)建EllipticEnvelope對象

outlier_detector=EllipticEnvelope(contamination=0.1)

#擬合數(shù)據(jù)

outlier_detector.fit(df)

#預測異常值

df['is_outlier']=outlier_detector.predict(df)

#查看異常值

print(df[df['is_outlier']==-1])1.2.2示例:消除重復數(shù)據(jù)使用pandas庫來消除數(shù)據(jù)集中的重復記錄。importpandasaspd

#創(chuàng)建一個包含重復數(shù)據(jù)的數(shù)據(jù)框

data={'姓名':['張三','李四','王五','張三','趙六'],

'年齡':[25,30,35,25,40],

'收入':[50000,60000,70000,50000,80000]}

df=pd.DataFrame(data)

#消除重復數(shù)據(jù)

df_unique=df.drop_duplicates()

#查看處理后的數(shù)據(jù)框

print(df_unique)通過這些示例,我們可以看到數(shù)據(jù)預處理與清洗在數(shù)據(jù)挖掘中的重要性,以及如何使用Python的庫來執(zhí)行這些操作。正確的數(shù)據(jù)預處理可以顯著提高模型的性能和預測準確性。2數(shù)據(jù)質(zhì)量評估數(shù)據(jù)質(zhì)量評估是數(shù)據(jù)挖掘項目中至關重要的第一步,它確保了后續(xù)分析和建模的準確性。在本章節(jié)中,我們將深入探討如何識別缺失值和檢測異常值,這兩個關鍵步驟對于提高數(shù)據(jù)質(zhì)量至關重要。2.1識別缺失值2.1.1原理在數(shù)據(jù)集中,缺失值是指數(shù)據(jù)記錄中未提供或無法獲取的值。這些缺失值可能由各種原因造成,如數(shù)據(jù)收集過程中的錯誤、設備故障、人為疏忽等。識別缺失值是數(shù)據(jù)預處理的第一步,因為缺失值的存在可能會影響模型的訓練和預測結(jié)果的準確性。2.1.2內(nèi)容與代碼示例2.1.2.1使用Pandas庫識別缺失值在Python中,Pandas庫提供了強大的數(shù)據(jù)處理功能,可以輕松識別數(shù)據(jù)集中的缺失值。數(shù)據(jù)樣例假設我們有一個包含房價數(shù)據(jù)的數(shù)據(jù)集,其中包含一些缺失值:importpandasaspd

#創(chuàng)建一個包含缺失值的示例數(shù)據(jù)集

data={'房間數(shù)':[3,4,5,None,7],

'面積':[120,150,None,180,200],

'價格':[300000,450000,500000,600000,None]}

df=pd.DataFrame(data)代碼示例#導入Pandas庫

importpandasaspd

#創(chuàng)建數(shù)據(jù)集

data={'房間數(shù)':[3,4,5,None,7],

'面積':[120,150,None,180,200],

'價格':[300000,450000,500000,600000,None]}

df=pd.DataFrame(data)

#檢查數(shù)據(jù)集中是否存在缺失值

print(df.isnull().sum())

#查找包含缺失值的行

missing_rows=df[df.isnull().any(axis=1)]

print(missing_rows)解釋df.isnull().sum():這行代碼會返回數(shù)據(jù)集中每個列的缺失值數(shù)量。df[df.isnull().any(axis=1)]:這行代碼會篩選出至少有一個缺失值的行。2.2檢測異常值2.2.1原理異常值是指數(shù)據(jù)集中顯著偏離其他值的觀測值,它們可能是由測量錯誤、數(shù)據(jù)錄入錯誤或真實異常情況引起的。異常值的存在可能對數(shù)據(jù)挖掘模型產(chǎn)生負面影響,因此檢測并處理異常值是數(shù)據(jù)預處理的重要環(huán)節(jié)。2.2.2內(nèi)容與代碼示例2.2.2.1使用箱線圖檢測異常值箱線圖是一種統(tǒng)計圖表,用于顯示一組數(shù)據(jù)的分布情況,特別適合于檢測異常值。數(shù)據(jù)樣例我們繼續(xù)使用上述房價數(shù)據(jù)集,但假設所有數(shù)據(jù)都是完整的。代碼示例#導入Pandas和Matplotlib庫

importpandasaspd

importmatplotlib.pyplotasplt

#創(chuàng)建數(shù)據(jù)集

data={'房間數(shù)':[3,4,5,6,7],

'面積':[120,150,180,200,220],

'價格':[300000,450000,500000,600000,1000000]}

df=pd.DataFrame(data)

#使用箱線圖檢測異常值

df.boxplot()

plt.show()解釋通過繪制箱線圖,我們可以直觀地看到數(shù)據(jù)的分布情況,箱線圖中的“須”部分通常表示數(shù)據(jù)的合理范圍,超出這個范圍的值被視為潛在的異常值。在上述代碼中,df.boxplot()生成了數(shù)據(jù)集的箱線圖,通過觀察可以發(fā)現(xiàn)“價格”列中可能存在異常值。2.2.2.2使用Z-Score檢測異常值Z-Score是一種統(tǒng)計學方法,用于衡量一個值與平均值的偏離程度。Z-Score的絕對值大于3通常被視為異常值。代碼示例#導入Pandas和SciPy庫

importpandasaspd

fromscipyimportstats

#創(chuàng)建數(shù)據(jù)集

data={'房間數(shù)':[3,4,5,6,7],

'面積':[120,150,180,200,220],

'價格':[300000,450000,500000,600000,1000000]}

df=pd.DataFrame(data)

#計算Z-Score

z_scores=stats.zscore(df['價格'])

#篩選異常值

outliers=df[(z_scores>3)|(z_scores<-3)]

print(outliers)解釋stats.zscore(df['價格']):這行代碼計算了“價格”列的Z-Score。(z_scores>3)|(z_scores<-3):這行代碼篩選出了Z-Score絕對值大于3的觀測值,即異常值。通過上述方法,我們可以有效地識別和檢測數(shù)據(jù)集中的缺失值和異常值,為后續(xù)的數(shù)據(jù)挖掘任務奠定堅實的基礎。3數(shù)據(jù)清洗技術數(shù)據(jù)清洗是數(shù)據(jù)預處理的重要環(huán)節(jié),旨在提高數(shù)據(jù)質(zhì)量,確保后續(xù)分析的準確性和可靠性。本教程將深入探討數(shù)據(jù)清洗中的兩個關鍵方面:缺失值處理和異常值處理。3.1缺失值處理方法3.1.1原理缺失值處理涉及識別和管理數(shù)據(jù)集中缺失的數(shù)據(jù)點。缺失值可能由多種原因造成,包括數(shù)據(jù)收集過程中的錯誤、設備故障或人為疏忽。處理缺失值的方法包括刪除、填充和預測。3.1.2內(nèi)容3.1.2.1刪除缺失值原理:刪除包含缺失值的行或列,適用于缺失值比例較小的情況。代碼示例:importpandasaspd

#創(chuàng)建示例數(shù)據(jù)集

data={

'A':[1,2,None,4],

'B':[5,None,None,8],

'C':[9,10,11,12]

}

df=pd.DataFrame(data)

#刪除包含缺失值的行

df_clean=df.dropna()

#刪除包含缺失值的列

df_clean=df.dropna(axis=1)3.1.2.2填充缺失值原理:使用統(tǒng)計方法(如平均值、中位數(shù)或眾數(shù))或特定值填充缺失數(shù)據(jù)。代碼示例:#使用平均值填充缺失值

df['A'].fillna(df['A'].mean(),inplace=True)

#使用前一個值填充缺失值

df['B'].fillna(method='ffill',inplace=True)

#使用特定值填充缺失值

df['C'].fillna(-999,inplace=True)3.1.2.3預測缺失值原理:使用機器學習模型預測缺失值。代碼示例:fromsklearn.imputeimportIterativeImputer

fromsklearn.linear_modelimportBayesianRidge

#使用貝葉斯嶺回歸預測缺失值

imputer=IterativeImputer(estimator=BayesianRidge())

df_imputed=pd.DataFrame(imputer.fit_transform(df),columns=df.columns)3.2異常值處理策略3.2.1原理異常值處理旨在識別并處理數(shù)據(jù)集中顯著偏離其他值的觀測值。異常值可能由測量錯誤、數(shù)據(jù)錄入錯誤或真實異常情況引起。處理策略包括刪除、修正和保留。3.2.2內(nèi)容3.2.2.1刪除異常值原理:通過統(tǒng)計方法(如標準差、IQR)識別并刪除異常值。代碼示例:#使用IQR方法刪除異常值

Q1=df.quantile(0.25)

Q3=df.quantile(0.75)

IQR=Q3-Q1

df_clean=df[~((df<(Q1-1.5*IQR))|(df>(Q3+1.5*IQR))).any(axis=1)]3.2.2.2修正異常值原理:將異常值替換為更合理的值,如平均值或中位數(shù)。代碼示例:#使用中位數(shù)修正異常值

median=df['A'].median()

df['A']=df['A'].apply(lambdax:medianifx>median*3elsex)3.2.2.3保留異常值原理:在某些情況下,異常值可能包含有價值的信息,應保留并進一步分析。代碼示例:#標記異常值但不刪除

df['A_is_outlier']=df['A'].apply(lambdax:1ifx>df['A'].quantile(0.99)else0)通過上述方法,可以有效地清洗和預處理數(shù)據(jù),為后續(xù)的分類與回歸分析提供更高質(zhì)量的數(shù)據(jù)集。4數(shù)據(jù)預處理步驟數(shù)據(jù)預處理是數(shù)據(jù)挖掘中至關重要的一步,它直接影響到模型的性能和預測的準確性。在“數(shù)據(jù)挖掘:分類與回歸”領域,數(shù)據(jù)預處理主要包括數(shù)據(jù)標準化與歸一化、特征選擇與降維等關鍵步驟。下面,我們將深入探討這些步驟的原理和實施方法。4.1數(shù)據(jù)標準化與歸一化4.1.1原理數(shù)據(jù)標準化(Normalization)和歸一化(Standardization)是數(shù)據(jù)預處理中常見的兩種方法,用于調(diào)整數(shù)據(jù)的尺度,使不同特征處于同一數(shù)量級,從而避免某些特征因數(shù)值范圍過大而對模型產(chǎn)生過大的影響。數(shù)據(jù)標準化:將數(shù)據(jù)縮放到0到1之間,公式為:x。數(shù)據(jù)歸一化:將數(shù)據(jù)調(diào)整為均值為0,標準差為1的正態(tài)分布,公式為:x,其中μ是均值,σ是標準差。4.1.2示例代碼假設我們有一個數(shù)據(jù)集,包含兩個特征:年齡和收入,我們使用Python的pandas和scikit-learn庫來實現(xiàn)數(shù)據(jù)標準化和歸一化。importpandasaspd

fromsklearn.preprocessingimportMinMaxScaler,StandardScaler

#創(chuàng)建示例數(shù)據(jù)

data={

'Age':[25,30,35,40,45],

'Income':[50000,60000,70000,80000,90000]

}

df=pd.DataFrame(data)

#數(shù)據(jù)標準化

scaler=MinMaxScaler()

df_normalized=pd.DataFrame(scaler.fit_transform(df),columns=df.columns)

#數(shù)據(jù)歸一化

scaler=StandardScaler()

df_standardized=pd.DataFrame(scaler.fit_transform(df),columns=df.columns)

#打印結(jié)果

print("數(shù)據(jù)標準化結(jié)果:\n",df_normalized)

print("數(shù)據(jù)歸一化結(jié)果:\n",df_standardized)4.1.3解釋在上述代碼中,我們首先創(chuàng)建了一個包含年齡和收入的簡單數(shù)據(jù)集。然后,使用MinMaxScaler進行數(shù)據(jù)標準化,將所有特征的值縮放到0到1之間。接著,使用StandardScaler進行數(shù)據(jù)歸一化,使特征值具有零均值和單位方差。4.2特征選擇與降維4.2.1原理特征選擇(FeatureSelection)和降維(DimensionalityReduction)是數(shù)據(jù)預處理中用于減少數(shù)據(jù)集特征數(shù)量的兩種方法,旨在提高模型的效率和性能,同時減少過擬合的風險。特征選擇:從原始特征中選擇最相關的特征,可以基于統(tǒng)計方法、模型評分或?qū)<抑R。降維:通過轉(zhuǎn)換特征空間來減少特征數(shù)量,如主成分分析(PCA)。4.2.2示例代碼我們使用scikit-learn庫中的SelectKBest和PCA來實現(xiàn)特征選擇和降維。fromsklearn.feature_selectionimportSelectKBest,f_classif

fromsklearn.decompositionimportPCA

#創(chuàng)建示例數(shù)據(jù)

X=df[['Age','Income']]

y=df['Income']>65000#假設我們有一個二分類目標

#特征選擇

k_best=SelectKBest(score_func=f_classif,k=1)

X_selected=k_best.fit_transform(X,y)

#降維

pca=PCA(n_components=1)

X_reduced=pca.fit_transform(X)

#打印結(jié)果

print("特征選擇結(jié)果:\n",X_selected)

print("降維結(jié)果:\n",X_reduced)4.2.3解釋在特征選擇示例中,我們使用SelectKBest和f_classif評分函數(shù)來選擇與目標變量最相關的特征。k=1表示我們只選擇一個最佳特征。在降維示例中,我們使用PCA將數(shù)據(jù)集的維度減少到1,這意味著所有原始特征將被轉(zhuǎn)換為一個主成分,這個主成分包含了原始數(shù)據(jù)的大部分信息。通過這些步驟,我們可以有效地減少數(shù)據(jù)集的復雜性,提高模型的訓練速度和預測性能,同時避免過擬合問題。以上就是關于數(shù)據(jù)預處理中數(shù)據(jù)標準化與歸一化、特征選擇與降維的原理和代碼示例。在實際的數(shù)據(jù)挖掘項目中,這些步驟是不可或缺的,它們能夠幫助我們更好地理解和處理數(shù)據(jù),為構(gòu)建高效、準確的模型奠定基礎。5高級數(shù)據(jù)預處理5.1處理不平衡數(shù)據(jù)集在數(shù)據(jù)挖掘中,不平衡數(shù)據(jù)集是指其中一類或幾類樣本的數(shù)量遠多于其他類別的樣本。這種不平衡可能導致模型在預測時偏向于多數(shù)類,從而忽視少數(shù)類的預測準確性。處理不平衡數(shù)據(jù)集的常見方法包括:5.1.1過采樣(Over-sampling)過采樣是通過增加少數(shù)類的樣本數(shù)量來平衡數(shù)據(jù)集。這可以通過復制少數(shù)類樣本或使用更復雜的技術如SMOTE(SyntheticMinorityOver-samplingTechnique)來實現(xiàn)。5.1.1.1示例代碼:使用SMOTE進行過采樣#導入所需庫

fromimblearn.over_samplingimportSMOTE

fromsklearn.datasetsimportmake_classification

fromsklearn.model_selectionimporttrain_test_split

importpandasaspd

#生成不平衡數(shù)據(jù)集

X,y=make_classification(n_classes=2,class_sep=2,weights=[0.9,0.1],n_informative=3,n_redundant=1,flip_y=0,n_features=20,n_clusters_per_class=1,n_samples=1000,random_state=10)

#將數(shù)據(jù)轉(zhuǎn)換為DataFrame

df=pd.DataFrame(X)

df['target']=y

#顯示原始數(shù)據(jù)集的類別分布

print(df['target'].value_counts())

#使用SMOTE進行過采樣

sm=SMOTE(random_state=42)

X_res,y_res=sm.fit_resample(X,y)

#將過采樣后的數(shù)據(jù)轉(zhuǎn)換為DataFrame

df_res=pd.DataFrame(X_res)

df_res['target']=y_res

#顯示過采樣后數(shù)據(jù)集的類別分布

print(df_res['target'].value_counts())5.1.2欠采樣(Under-sampling)欠采樣是通過減少多數(shù)類的樣本數(shù)量來平衡數(shù)據(jù)集。這可以通過隨機刪除多數(shù)類樣本或使用更復雜的技術如TomekLinks來實現(xiàn)。5.1.2.1示例代碼:使用隨機欠采樣#導入所需庫

fromimblearn.under_samplingimportRandomUnderSampler

fromsklearn.datasetsimportmake_classification

fromsklearn.model_selectionimporttrain_test_split

importpandasaspd

#生成不平衡數(shù)據(jù)集

X,y=make_classification(n_classes=2,class_sep=2,weights=[0.9,0.1],n_informative=3,n_redundant=1,flip_y=0,n_features=20,n_clusters_per_class=1,n_samples=1000,random_state=10)

#將數(shù)據(jù)轉(zhuǎn)換為DataFrame

df=pd.DataFrame(X)

df['target']=y

#顯示原始數(shù)據(jù)集的類別分布

print(df['target'].value_counts())

#使用隨機欠采樣

rus=RandomUnderSampler(random_state=42)

X_res,y_res=rus.fit_resample(X,y)

#將欠采樣后的數(shù)據(jù)轉(zhuǎn)換為DataFrame

df_res=pd.DataFrame(X_res)

df_res['target']=y_res

#顯示欠采樣后數(shù)據(jù)集的類別分布

print(df_res['target'].value_counts())5.2特征工程深入特征工程是數(shù)據(jù)預處理中的關鍵步驟,它涉及選擇、構(gòu)建和轉(zhuǎn)換特征以提高模型的性能。深入特征工程包括:5.2.1特征選擇特征選擇是識別和選擇對模型預測最有價值的特征的過程。這可以通過統(tǒng)計測試、模型系數(shù)或遞歸特征消除(RFE)等方法實現(xiàn)。5.2.1.1示例代碼:使用遞歸特征消除進行特征選擇#導入所需庫

fromsklearn.datasetsimportmake_classification

fromsklearn.feature_selectionimportRFE

fromsklearn.linear_modelimportLogisticRegression

importpandasaspd

#生成數(shù)據(jù)集

X,y=make_classification(n_features=20,n_informative=2,n_redundant=10,n_classes=2,random_state=1)

#將數(shù)據(jù)轉(zhuǎn)換為DataFrame

df=pd.DataFrame(X)

df['target']=y

#使用邏輯回歸和RFE進行特征選擇

model=LogisticRegression()

rfe=RFE(model,n_features_to_select=5)

X_rfe=rfe.fit_transform(X,y)

#顯示選擇的特征

print("Selectedfeatures:",rfe.support_)5.2.2特征構(gòu)建特征構(gòu)建是創(chuàng)建新特征以捕捉數(shù)據(jù)中的潛在模式。這可以通過組合現(xiàn)有特征、使用領域知識或應用數(shù)學變換來實現(xiàn)。5.2.2.1示例代碼:使用領域知識構(gòu)建新特征#假設我們有一個包含日期和銷售額的數(shù)據(jù)集

data={'date':['2023-01-01','2023-01-02','2023-01-03','2023-01-04','2023-01-05'],

'sales':[100,150,200,175,225]}

df=pd.DataFrame(data)

#將日期列轉(zhuǎn)換為日期時間對象

df['date']=pd.to_datetime(df['date'])

#構(gòu)建新特征:周幾

df['day_of_week']=df['date'].dt.dayofweek

#顯示數(shù)據(jù)集

print(df)5.2.3特征轉(zhuǎn)換特征轉(zhuǎn)換是將特征轉(zhuǎn)換為更有利于模型的形式。常見的轉(zhuǎn)換包括歸一化、標準化和對數(shù)變換。5.2.3.1示例代碼:使用標準化進行特征轉(zhuǎn)換#導入所需庫

fromsklearn.preprocessingimportStandardScaler

importpandasaspd

importnumpyasnp

#生成數(shù)據(jù)集

data={'feature1':[1,2,3,4,5],

'feature2':[10,20,30,40,50]}

df=pd.DataFrame(data)

#使用StandardScaler進行特征轉(zhuǎn)換

scaler=StandardScaler()

df_scaled=pd.DataFrame(scaler.fit_transform(df),columns=df.columns)

#顯示標準化后的數(shù)據(jù)集

print(df_scaled)以上示例展示了如何處理不平衡數(shù)據(jù)集以及如何進行深入的特征工程,包括特征選擇、構(gòu)建和轉(zhuǎn)換。這些技術對于提高數(shù)據(jù)挖掘模型的性能至關重要。6實踐案例分析6.1分類任務中的數(shù)據(jù)預處理數(shù)據(jù)預處理在分類任務中至關重要,它包括數(shù)據(jù)清洗、特征選擇、特征工程、數(shù)據(jù)轉(zhuǎn)換和數(shù)據(jù)歸一化等步驟。下面,我們將通過一個具體的案例來詳細探討這些步驟。6.1.1數(shù)據(jù)清洗數(shù)據(jù)清洗是預處理的第一步,主要目的是處理缺失值、異常值和重復數(shù)據(jù)。6.1.1.1示例:處理缺失值假設我們有一個關于客戶購買行為的數(shù)據(jù)集,其中包含年齡、性別、收入和購買次數(shù)等特征。數(shù)據(jù)集中存在一些缺失值,我們需要對其進行處理。importpandasaspd

importnumpyasnp

#創(chuàng)建示例數(shù)據(jù)集

data={

'年齡':[25,30,np.nan,35,40],

'性別':['男','女','女',np.nan,'男'],

'收入':[50000,60000,70000,np.nan,80000],

'購買次數(shù)':[1,2,3,4,np.nan]

}

df=pd.DataFrame(data)

#使用中位數(shù)填充年齡的缺失值

df['年齡'].fillna(df['年齡'].median(),inplace=True)

#使用眾數(shù)填充性別的缺失值

df['性別'].fillna(df['性別'].mode()[0],inplace=True)

#使用平均數(shù)填充收入的缺失值

df['收入'].fillna(df['收入'].mean(),inplace=True)

#刪除包含購買次數(shù)缺失值的行

df.dropna(subset=['購買次數(shù)'],inplace=True)

print(df)6.1.2特征選擇特征選擇是選擇對模型預測最有幫助的特征,以減少模型的復雜度和提高預測性能。6.1.2.1示例:使用相關性分析進行特征選擇importseabornassns

importmatplotlib.pyplotasplt

#計算特征之間的相關性

correlation_matrix=df.corr()

#使用熱力圖可視化相關性矩陣

sns.heatmap(correlation_matrix,annot=True)

plt.show()

#根據(jù)相關性矩陣選擇與目標變量相關性高的特征

selected_features=correlation_matrix['購買次數(shù)'].sort_values(ascending=False).index[1:3]

print(selected_features)6.1.3特征工程特征工程是創(chuàng)建新特征或轉(zhuǎn)換現(xiàn)有特征,以提高模型的預測能力。6.1.3.1示例:創(chuàng)建新特征#創(chuàng)建新特征:收入等級

df['收入等級']=pd.qcut(df['收入'],q=4,labels=['低','中低','中高','高'])

print(df)6.1.4數(shù)據(jù)轉(zhuǎn)換數(shù)據(jù)轉(zhuǎn)換是將數(shù)據(jù)轉(zhuǎn)換為適合模型的形式,如編碼分類特征、標準化數(shù)值特征等。6.1.4.1示例:編碼分類特征#使用LabelEncoder編碼性別特征

fromsklearn.preprocessingimportLabelEncoder

le=LabelEncoder()

df['性別']=le.fit_transform(df['性別'])

print(df)6.1.5數(shù)據(jù)歸一化數(shù)據(jù)歸一化是將數(shù)值特征縮放到相同的范圍,以避免某些特征對模型的影響過大。6.1.5.1示例:使用MinMaxScaler進行數(shù)據(jù)歸一化fromsklearn.preprocessingimportMinMaxScaler

#創(chuàng)建MinMaxScaler對象

scaler=MinMaxScaler()

#對年齡和收入特征進行歸一化

df[['年齡','收入']]=scaler.fit_transform(df[['年齡','收入']])

print(df)6.2回歸任務中的數(shù)據(jù)清洗實踐回歸任務中的數(shù)據(jù)清洗與分類任務類似,但更注重數(shù)值特征的處理。6.2.1示例:處理異常值異常值是指與數(shù)據(jù)集中的其他值顯著不同的值,它們可能會影響模型的預測性能。#使用IQR方法識別并處理異常值

Q1=df['收入'].quantile(0.25)

Q3=df['收入'].quantile(0.75)

IQR=Q3-Q1

#定義異常值的上下限

lower_bound=Q1-1.5*IQR

upper_bound=Q3+1.5*IQR

#刪除異常值

df=df[(df['收入']>=lower_bound)&(df['收入']<=upper_bound)]

print(df)6.2.2示例:處理非數(shù)值特征在回歸任務中,非數(shù)值特征需要轉(zhuǎn)換為數(shù)值形式,以便模型能夠處理。#使用OneHotEncoder編碼收入等級特征

fromsklearn.preprocessingimportOneHotEncoder

#創(chuàng)建OneHotEncoder對象

ohe=OneHotEncoder(sparse=False)

#對收入等級特征進行編碼

encoded_features=ohe.fit_transform(df[['收入等級']])

encoded_df=pd.DataFrame(encoded_features,columns=ohe.get_feature_names_out(['收入等級']))

df=pd.concat([df,encoded_df],axis=1)

df.drop('收入等級',axis=1,inplace=True)

print(df)通過以上步驟,我們可以有效地對數(shù)據(jù)進行預處理和清洗,為分類和回歸任務的模型訓練提供高質(zhì)量的數(shù)據(jù)。7數(shù)據(jù)預處理與清洗的總結(jié)數(shù)據(jù)預處理與清洗是數(shù)據(jù)挖掘流程中的關鍵步驟,直接影響到模型的性能和預測的準確性。以下是對數(shù)據(jù)預處理與清洗過程的總結(jié):7.1數(shù)據(jù)清洗7.1.11缺失值處理原理:數(shù)據(jù)中可能包含缺失值,這些缺失值可能是因為數(shù)據(jù)收集過程中的錯誤或遺漏。處理缺失值的方法包括刪除、填充(如使用平均值、中位數(shù)或眾數(shù))或預測缺失值。示例代碼:importpandasaspd

importnumpyasnp

#創(chuàng)建一個包含缺失值的數(shù)據(jù)框

data={'A':[1,2,np.nan,4],

'B':[5,np.nan,np.nan,8],

'C':[9,10,11,12]}

df=pd.DataFrame(data)

#使用平均值填充缺失值

df['A'].fillna(df['A'].mean(),inplace=True)

df['B'].fillna(df['B'].median(),inplace=True)

df['C'].fillna(df['C'].mode()[0],inplace=True)

#輸出處理后的數(shù)據(jù)框

print(df)7.1.22異常值檢測原理:異常值是指數(shù)據(jù)集中與其他數(shù)據(jù)點顯著不同的值,可能由測量錯誤或極端事件引起。常用的方法有基于統(tǒng)計的方法(如Z-score或IQR)和基于模型的方法(如使用聚類或決策樹)。示例代碼:fromscipyimportstats

importnumpyasnp

#創(chuàng)建一個包含異常值的數(shù)據(jù)集

data=np.random.normal(0,1,100)

data[0]=10#添加一個異常值

#使用Z-score檢測異常值

z_scores=stats.zscore(data)

abs_z_scores=np.abs(z_scores)

filtered_entries=(abs_z_scores<3)

#過濾異常值

cleaned_data=data[filtered_entries]

#輸出清洗后的數(shù)據(jù)

print(cleaned_data)7.2數(shù)據(jù)預處理7.2.11數(shù)據(jù)標準化原理:數(shù)據(jù)標準化(或歸一化)是將數(shù)據(jù)轉(zhuǎn)換為具有相同尺度的過程,以避免某些特征因數(shù)值范圍大而對模型產(chǎn)生過大的影響。常用的方法有最小-最大縮放和Z-score標準化。示例代碼:fromsklearn.preprocessingimportMinMaxS

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論