<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

數據預處理和特征工程的常用功能

新機器視覺 ? 來源:DA隨想隨筆 ? 2024-01-25 11:26 ? 次閱讀

來源:DA隨想隨筆

一、 概述

機器學習最基礎的5個流程,分別是數據獲取,數據預處理,特征工程,建模、測試和預測,上線與部署。

如果用做菜來對比,數據獲取就好比買菜,數據預處理就好比洗菜,特征工程就好比主菜輔料加工準備,建模就好比炒菜,上線部署就好比擺盤上菜。

由此可見,數據預處理和特征工程在整個機器學習應用工作中,占據了極其重要的地位。要是菜沒洗干凈,食材沒加工好,大廚手藝再高也做不出好吃的菜。

數據預處理

數據預處理主要是從數據角度和業務角度兩方面入手,從獲取的數據中查缺補漏,修正不準確的數據,剔除不適用的數據。

數據預處理的主要目的就是讓數據符合模型需求,能正確表達業務意義。

常見的需要處理的問題有:

數據類型問題:數據中有的是文本格式,有的是數值格式,有的同樣是時間序列但是格式不同。

數據質量問題:數據存在重復值,異常值,缺失值,數據量綱不統一有的數據取值在(0,1)之間有的取值是百萬級的,樣本分布存在偏態有某幾類樣本量極大。

業務表達問題:有些數據從值上看符合一般邏輯,但是落在具體業務場景中,就會存在問題,因此要結合業務意義,剔除不符合要求的樣本數據。

特征工程

特征工程主要是對原始數據進行加工、組合、轉換、產生新的變量,使其更能代表預測模型的潛在問題。同時還可以通過特征工程,挑選和提取一些更有價值的特征,剔除一些對模型性能影響不大的特征,從而降低模型計算的復雜度。

特征工程的主要目的是降低模型計算成本,提高模型精度。

常見的需要處理的問題有:

相關性分析:特征與特征之間相關性強,說明具有多重共線性,可以將幾個特征組合成一個新特征,實現降維;特征與目標之間的相關性強,說明特征對目標的解釋性好,是可用的特征,反之,說明特征對目標沒什么影響,則可以剔除該特征。

特征構造:基于原始特征,進行組合,轉換,加工,生成新的特征,使得其更具有對目標的解釋性。

特征降維:講一些解釋性弱的特征,業務意義不強的特征剔除,降低模型運算復雜度,提高性能。

二、 常用功能

接下來以python為例,介紹在數據預處理和特征工程過程中常用的一些方法。

# 導入數據,這里以python自帶的鳶尾花數據為例
from sklearn import datasets
import pandas as pd  
import numpy as np
# 加載數據集
data = datasets.load_iris()
X = data.data   # 特征值
y = data.target   # 目標值
data_iris=pd.DataFrame(X)
data_iris['target']=pd.DataFrame(y)
data_iris=data_iris.rename(columns={0:'F1',1:'F2',2:'F3',3:'F4','target':'target'})
data_iris.head()

數據預處理

重復值處理

# 重復值刪除
data_iris = data_iris.drop_duplicates()

缺失值處理

# 缺失值處理
## 查看缺失值
data_iris.isnull().sum()
## 缺失值刪除
### 刪除含有缺失值的行  
data_iris = data_iris.dropna()  


### 刪除含有缺失值的列  
data_iris = data_iris.dropna(axis=1)


##缺失值填補
### 用指定數值填充缺失值 ,如0
data_iris = data_iris.fillna(0)
### 用均值、中位數、眾數填補
data_iris = data_iris.fillna(data_iris.mean())

異常值處理

# 異常值識別
## 分位數識別異常值,將上下四分位數之外的都定義為異常值


from scipy import stats  


### 計算IQR  
Q1 = data_iris.quantile(0.25)  
Q3 = data_iris.quantile(0.75)  
IQR = Q3 - Q1  


### 找出異常值  
lower_bound = Q1 - 1.5 * IQR  
upper_bound = Q3 + 1.5 * IQR  
outliers = data_iris[(data_iris < lower_bound) | (data_iris > upper_bound)]


## 標準差識別異常值,在幾個標準差之外的數據定義為異常值 
z_scores = (data_iris - data_iris.mean()) / data_iris.std()  
outliers_z = z_scores[abs(z_scores) > 3]


# 異常值處理
# 異常值處理方式很多,如直接刪除或用均值替代等,其與缺失值處理方式基本一致,就不再額外贅述。

分類變量編碼

讓不可計算的分類變量轉化為可計算的數值或者矩陣

# label編碼,將分類變量轉化成數值形式
from sklearn.preprocessing import LabelEncoder
data_iris.iloc[:,-1] = LabelEncoder().fit_transform(data_iris.iloc[:,-1])
# onehot編碼,創建虛擬變量,將分類變量轉化成01矩陣
from sklearn.preprocessing import OneHotEncoder
X = data_iris.iloc[:,1:-1]
enc = OneHotEncoder(categories='auto').fit(X)
result = enc.transform(X).toarray()

連續變量編碼

將連續變量離散化,使得其可以根據有區分效果。

# 二值化,大于閾值記為1,小于閾值記為0
from sklearn.preprocessing import Binarizer
X = data_iris.iloc[:,0].values.reshape(-1,1)               #類為特征專用,所以不能使用一維數組
transformer = Binarizer(threshold=30).fit_transform(X)
#transformer
# 分箱
from sklearn.preprocessing import KBinsDiscretizer
X = data_iris.iloc[:,0].values.reshape(-1,1) 
# n_bins設置要分幾箱,默認為5;encode設置編碼方式,默認onehot;
# strategy設置分箱方法,默認為quantile等位分箱(每箱樣本數量相同),uniform等寬分箱,每個箱的上下限差值相同,kmeans聚類分箱
est = KBinsDiscretizer(n_bins=3, encode='ordinal', strategy='uniform')
est.fit_transform(X)
#查看轉換后分的箱:變成了一列中的三箱
set(est.fit_transform(X).ravel())
est = KBinsDiscretizer(n_bins=3, encode='onehot', strategy='uniform')#查看轉換后分的箱:變成了啞變量
est.fit_transform(X).toarray()

標準化

消除變量的量綱,使得特征變量的值都收斂于同一個范圍。

# maxmin標準化
from sklearn.preprocessing import MinMaxScaler
#實現歸一化
scaler = MinMaxScaler()                             
scaler = scaler.fit(data_iris)                           
result = scaler.transform(data_iris)                     


# z標準化
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()                           
scaler = scaler.fit(data_iris) 
result = scaler.transform(data_iris)

特征工程

業務理解

通過數據預處理,數據邏輯上的錯誤基本已經消除。但這是否就代表著可以建模了呢?當然不是,這里還需要對特征進行處理。

如果說數據預處理是對行數據進行操作,那么特征工程主要是對列進行操作。

而這其中,最重要的一步,是對特征的業務理解。如,某一個數據集有幾列分別為地區,天氣,降水量,空氣濕度,用戶年齡。

如果現在是要對天氣情況進行分析,那么很明顯,用戶年齡這個特征字段對這個目標是沒有用處的。因此從業務理解的角度考慮,首先就可以剔除一些沒有錯,但沒有用的特征變量。

特征選擇-過濾法

# 方差過濾
## 如果一個特征的方差很小,說明數據都集中于一個范圍中,沒有什么差異性,甚至都是相同的值,該特征用處就不大
from sklearn.feature_selection import VarianceThreshold
#獲取刪除不合格特征之后的新特征矩陣
X = VairanceThreshold().fit_transform(data_iris) 
# 相關性過濾
## 如果特征與標簽之間沒有相關性,則可以剔除該特征,如果特征與特征之間相關性很強,則可以將特征組合,實現降維
## 這里以卡方過濾為例,常見的還有F檢驗,互信息等
from sklearn.ensemble import RandomForestClassifier as RFC
from sklearn.model_selection import cross_val_score
from sklearn.feature_selection import SelectKBest
from sklearn.feature_selection import chi2
# k表示需要保留的特征個數
X_kafang = SelectKBest(chi2, k=3).fit_transform(data_iris.iloc[:,:-1], data_iris['target'])
## 至于k怎么取值,一方面是可以根據業務實際需要取,也可以通過學習曲線取學習曲線中最高點對應的k值
%matplotlib inline
import matplotlib.pyplot as plt
score = []
for i in range(3,0,-1):
    X_fschi = SelectKBest(chi2, k=i).fit_transform(data_iris.iloc[:,:-1], data_iris['target'])
    once = cross_val_score(RFC(n_estimators=10,random_state=0),X_fschi,data_iris['target'],cv=5).mean()
    score.append(once)
plt.plot(range(3,0,-1),score)
plt.show()

特征選擇-嵌入法

將特征嵌入模型,讓算法同時進行特征選擇和模型訓練,然后輸出特征的權重參數值,通過排序選擇有用的特征,這里沒有一個統一的標準去判斷權重參數達到什么標準可以剔除。且不同算法對參數讀取的函數也略有不同,因此對本方法就不具體舉例了。

特征選擇-包裝法

通過引入一個函數,來幫助算法在模型訓練時自主選擇特征,不需要人工判斷參數值。該方法相對復雜,本文也不做舉例。

三、 總結

本文簡單介紹了數據分析過程中,數據預處理和特征工程的相關基礎內容,并進行了一些舉例。但其實這兩部分內容遠不是這么簡單,在實際操作中,所遇到的問題更加復雜,且可應用的方法也非常多,本文所介紹的都是最基礎的方法,便于理解其用途。

可以說數據分析結果好不好,很大程度取決于數據預處理和特征工程做的好不好。本文相對粗淺,感興趣的朋友,可以再深入研究。

審核編輯:湯梓紅

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 機器學習
    +關注

    關注

    66

    文章

    8179

    瀏覽量

    131122
  • 數據集
    +關注

    關注

    4

    文章

    1182

    瀏覽量

    24460
  • 數據預處理
    +關注

    關注

    1

    文章

    16

    瀏覽量

    2723

原文標題:算法基礎-數據預處理和特征工程

文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    轉:Keil的使用方法 - 常用功能(二)

    的鏈接(微信點擊閱讀原文),Keil使用方法(匯總):http://blog.csdn.net/ybhuangfugui/article/details/51647893 今天總結關于工程目標(配置)選項的常用功能,不會總結每一個功能
    發表于 06-13 10:42

    請問預處理有哪些常用功能分別如何使用?

    預處理有哪些常用功能,分別如何使用? 溫馨提示: 請從以下鏈接中的帖子學習相關內容并進行回答,其他地方得到的答案不能作為標準答案,僅能做為補充說明,七天之內答案不可見,答題的童鞋有七天時間修改
    發表于 05-21 09:17

    Python數據預處理方法

    機器學習-Python實踐Day3(特征工程--數據預處理2)
    發表于 06-03 15:55

    數據探索與數據預處理

    目錄1數據探索與數據預處理21.1 賽題回顧21.2 數據探索性分析與異常值處理21.3 相關性分析52
    發表于 07-12 08:37

    c語言預處理命令以什么開頭

    全面了吧。#define和#include是最常用預處理,單片機程序不用其他預處理也完全可行。所以初學者并不深究預處理的應用。我也只是初學者而已,但是發現
    發表于 07-20 07:00

    數據預處理故障信息獲取

    數據預處理故障信息獲取1.目前,常用的故障診斷參數有電流、電壓、功率、轉矩、磁通、溫度、振動等物理量。其中定子電流信號相對于其它參數受環境等外界影響最小,也因為電流傳感器安裝方便而最容易獲取,因此
    發表于 09-06 08:43

    工業蒸汽量預測的數據預處理知識有哪些

    工業蒸汽量預測的數據預處理知識有哪些?工業蒸汽量預測的特征工程有哪些?
    發表于 10-22 06:32

    變頻器的常用功能

    變頻器的常用功能
    發表于 08-23 10:48 ?86次下載

    AltiumDesigner設計常用功能鍵大全

    Altium Designer 設計常用功能鍵大全
    發表于 07-03 15:19 ?0次下載

    Keil的使用方法 - 常用功能(二)

    Keil的使用方法 - 常用功能(二)
    的頭像 發表于 04-07 14:55 ?3047次閱讀
    Keil的使用方法 -  <b class='flag-5'>常用功能</b>(二)

    Keil的使用方法 - 常用功能(一)

    Keil的使用方法 - 常用功能(一)
    的頭像 發表于 04-07 14:51 ?8339次閱讀
    Keil的使用方法 -  <b class='flag-5'>常用功能</b>(一)

    機器學習的特征預處理問題討論

    本文我們來討論特征預處理的相關問題。主要包括特征的歸一化和標準化,異常特征樣本清洗與樣本數據不平衡問題的
    的頭像 發表于 03-15 17:14 ?766次閱讀

    allegro常用功能介紹

    allegro常用功能介紹
    發表于 01-10 11:53 ?0次下載

    機器學習算法學習之特征工程1

    特征工程是機器學習過程中的關鍵步驟,涉及將原始數據轉換為機器學習算法可以有效使用的格式。在本篇博客文章中,我們介紹了各種特征工程技術,包括
    的頭像 發表于 04-19 11:38 ?602次閱讀
    機器學習算法學習之<b class='flag-5'>特征</b><b class='flag-5'>工程</b>1

    機器學習算法學習之特征工程3

    特征工程是機器學習過程中的關鍵步驟,涉及將原始數據轉換為機器學習算法可以有效使用的格式。在本篇博客文章中,我們介紹了各種特征工程技術,包括
    的頭像 發表于 04-19 11:38 ?778次閱讀
    機器學習算法學習之<b class='flag-5'>特征</b><b class='flag-5'>工程</b>3
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>