1. 程式人生 > >《特徵工程三部曲》之一:資料處理

《特徵工程三部曲》之一:資料處理

要理解特徵工程,首先要理解資料(Data)和特徵(Feature)的概念

概念

  • 特徵工程(Feature Engineering)

    • 其本質上是一項工程活動,它目的是最大限度地從原始資料中提取特徵以供演算法和模型使用。

特徵工程在資料探勘中有舉足輕重的位置
資料領域一致認為:資料和特徵決定了機器學習的上限,而模型和演算法只能逼近這個上限而已。

  • 特徵工程重要性:

    • 特徵越好,靈活性越強;

    • 特徵越好,模型越簡單;

    • 特徵越好,效能越出色;

好特徵即使使用一般的模型,也能得到很好的效果!好特徵的靈活性在於它允許你可以選擇不復雜的模型,同時,執行速度也更快,也更容易理解和維護。

好的特徵,即使引數不是最優解,模型效能也能表現很好,因此,不需要太多時間去尋找最優引數,大大的降低了模型的複雜度,使模型趨向簡單。

模型的效能包括模型的效果,執行的效率及模型的可解釋性。特徵工程的最終目的就是提升模型的效能。

資料科學家通過總結和歸納,把特徵工程劃分為以下三個部分:

  • 特徵工程包括:

    • 資料處理

    • 特徵選擇

    • 維度壓縮

資料處理

資料處理的常用技巧

  • 量綱不一

  • 虛擬變數

  • 缺失值填充

資料處理——量綱不一

  • 量綱:就是單位,特徵的單位不一致,特徵就不能放在一起比較。

  • 解決量綱不一致的方法:標準化

    • 0-1標準化

    • Z標準化

    • Normalizer歸一化

0-1標準化

是對原始資料進行線性變換,將特徵值對映成區間為[0,1]的標準值中:

=

Z標準化

基於特徵值的均值(mean)和標準差(standard deviation)進行資料的標準化。它的計算公式為:

=

標準化後的變數值圍繞0上下波動,大於0說明高於平均水平,小於0說明低於平均水平。

Normalizer歸一化

將每個樣本縮放到單位範數(每個樣本的範數為1),計算公式如下:

x¯=xni=1x2i

如何使用sklearn實現標準化

sklearn簡介

  • sklearn

    • 全名Scikit-Learn,是基於Python的機器學習模組,基於BSD開源許可證,官網上可以找到相關sklearn的資源,模組下載,文件,歷程等等;

    • sklearn的資料結構基於numpy和pandas;

    • sklearn的資料計算基於scipy;

    • sklearn的資料視覺化基於matplotlib;

  • sklearn是在現有的資料分析,資料計算,資料視覺化最好的包的基礎上,搭建起來的最好python 機器學習的框架;

  • sklearn的六大基本功能

    • 分類

    • 迴歸

    • 聚類

    • 資料降維

    • 模型選擇

    • 模型預處理

  • sklearn處理機器學習問題的三個步驟:

    • 資料準備與預處理

    • 模型選擇與訓練

    • 模型驗證與引數調優

用sklearn實現標準化

#匯入資料到data變數中
import pandas
data = pandas.read_csv('路徑.csv')

#(一)Min-Max 標準化

from sklearn.preprocessing import MinMaxScaler
#初始化一個scaler物件
scaler = MinMaxScaler()
#呼叫scaler的fit_transform方法,把我們要處理的列作為引數傳進去

data['標準化後的A列資料'] = scaler.fit_transform(data['A列資料'])
data['標準化後的B列資料'] = scaler.fit_transform(data['B列資料'])

#(二)Z-Score標準化 (可在scale中直接實現)

from sklearn.preprocessing import scale
data['標準化後的A列資料'] = scale(data['A列資料'])
data['標準化後的B列資料'] = scale(data['B列資料'])

# (三) Normalizer歸一化

from sklearn.preprocessing import Normalizer
scaler = Normalizer()
#歸一化可以同時處理多個列,所以[0]第一個進行賦值
data['歸一化後的A列資料'] = scaler.fit_transform(data['A列資料'])[0]
data['歸一化後的B列資料'] = scaler.fit_transform(data['B列資料'])[0]

資料處理——虛擬變數

  • 虛擬變數:也叫啞變數和離散特徵編碼,可用來表示分類變數、非資料因素可能產生的影響。

  • 虛擬變數的兩種資料型別:

    • 離散特徵的取值之間有大小的意義:例如:尺寸(L、XL、XXL)

    • 離散特徵的取值之間沒有大小的意義:例如:顏色(Red、Blue、Green)

  • 離散特徵值有大小意義的虛擬變數處理

    • pandas.Series.map(dict)

      • 離散特徵的取值之間有大小意義的處理函式,我們只需要把大小值以字典的方式,作為第一個引數傳入即可;

        • (1) dict 對映的字典
  • 離散特徵值沒有大小意義的虛擬變數處理

    • pandas.get_dummies(data,prefix=None,prefix_sep=’_’,dummy_na=False,columns=None,drop_first=False)

      • 離散特徵的取值之間沒有大小意義的處理方法,我們可以使用get_dummies方法處理,它有6個常用的引數

        • (1) data 要處理的DataFrame

        • (2) prefix 列名的字首,在多個列有相同的離散項時候使用

        • (3) prefix_sep 字首和離散值的分隔符,預設為下劃線,預設即可

        • (4) dummy_na 是否把NA值,作為一個離散值進行處理,預設不處理

        • (5) columns 要處理的列名,如果不指定該列,那麼預設處理所有列

        • (6) drop_first 是否從備選項中刪第一個,建模的時候為避免共線性使用

虛擬變數—實戰案例

以網際網路金融行業為例:

import pandas
#有些朋友也可能是encoding='utf8'或其他
data=pandas.read_csv('file:///Users/apple/Desktop/jacky_1.csv',encoding='GBK')
print(data)

@資料分析-jacky

其實,虛擬變數的實質就是要把離散型的資料轉化為連續型的資料,因為第1列年齡已經是連續值,所以我們就不需要處理了。
我們看看如何處理學歷和性別?
因為不同學歷之間是有高低之分的,因此我們要使用Map方法來處理這種型別的離散型資料;

  • 第1步: 首先我們要處理不同學歷之間的大小值

    • 我們使用drop_duplicates方法,來看看資料列都有哪些學歷
#檢視學歷去重之後的情況
data['學歷'].drop_duplicates()
  • 第2步:理解資料值背後的意義,作出我們自己的解析,對每個學歷進行評分
#構建學歷字典
educationLevelDict={'博士':4,'碩士':3,'大學':2,'大專':1}
#呼叫Map方法進行虛擬變數的轉換
data['Education Level Map']=data['Education Level'].map(educationLevelDict)

@資料分析-jacky

  • 第3步 對於性別這種沒有大小比較的離散變數,我們使用get_dummies方法,來進行呼叫處理即可;
dummies=pandas.get_dummies(
data,
columns=['性別'],
prefix=['性別'],
prefix_sep='_',
dummy_na=False,
drop_first=False)
  • 完整程式碼展示
import pandas
data=pandas.read_csv('file:///Users/apple/Desktop/jacky_1.csv',encoding='GBK')

data['學歷'].drop_duplicates()
educationLevelDict={'博士':4,'碩士':3,'大學':2,'大專':1}
data['學歷 Map']=data['學歷'].map(educationLevelDict)

dummies=pandas.get_dummies(data,columns=['性別'],prefix=['性別'],prefix_sep='_',dummy_na=False,drop_first=False)

print(dummies)

@資料分析部落

資料處理——缺失值填充

  • 缺失值產生原因

    • 有些資訊暫時無法獲取;

    • 有些資訊被遺漏或者錯誤的處理了

  • 缺失值處理方法

    • 資料補齊

    • 刪除缺失行

    • 不處理

實操-使用統計指標填充缺失值

import pandas
data=pandas.read_csv('路徑.csv')
from sclera.preprocessing import Imputer
#'mean','median','most_frequent'
imputer=Imputer(strategy='mean')
imputer.fit_transform(data[['需填充列的列名']])

相關推薦

特徵工程三部曲之一資料處理

要理解特徵工程,首先要理解資料(Data)和特徵(Feature)的概念 概念 特徵工程(Feature Engineering) 其本質上是一項工程活動,它目的是最大限度地從原始資料中提取特徵以供演算法和模型使用。 特徵工程在資料探勘中有

python大規模資料處理技巧之一資料常用操作

面對讀取上G的資料,python不能像做簡單程式碼驗證那樣隨意,必須考慮到相應的程式碼的實現形式將對效率的影響。如下所示,對pandas物件的行計數實現方式不同,執行的效率差別非常大。雖然時間看起來都微不足道,但一旦執行次數達到百萬級別時,其執行時間就根本不可能

自定義spring boot starter三部曲之一準備工作

從本章開始,一起實戰一個自定義的spring boot starter,整個系列共三篇文章,內容如下: 準備:瞭解基本概念、規劃實戰內容; 實戰:開發自定義starter,並在demo工程中使用它; 深入:從spring和spring boot原始碼層面分析sta

spring4.1.8初始化原始碼學習三部曲之一AbstractApplicationContext構造方法

這個demo的原始碼可以在github下載,地址和連結資訊如下表所示: 名稱 連結 備註 專案主頁 https://github.com/zq2599/blog_demos 該專案在GitHub上的主頁 git倉庫地址(https)

spring+mybatis啟動NoClassDefFoundError異常分析三部曲之一穩定重現問題

上一週,web專案在釋出的時候應用啟動失敗了,錯誤資訊如下: org.springframework.web.context.ContextLoader] - Context initialization failed java.lang.NoClassDef

maven構建docker映象三部曲之一準備環境

更簡單的部署 之前的實戰中,如果要在docker環境中執行java的web工程,通常先執行一個支援線上部署的tomcat容器,然後通過mavenn的tomcat7-maven-plugin外掛把工程線上部署到tomcat中,有沒有更簡便的方法呢?有,利

大神教你玩轉 SSD 系列三資料處理

本系列將分為以下 4 個主題進行介紹。 一、SSD基準測試應該關注哪些指標 二、基準測試環境(工具/磁碟要求等) 三、針對磁碟的具體測試專案 四、資料處理 本篇主要介紹第四點——資料處理,在後面的文章推送中會繼續將把本系列的其他各主題分享給大家。 資料處理 如果記錄原始log,日誌都很大,好處是可

玩轉大資料系列之一資料採集與同步

資料的採集和同步,是先將資料從裝置、或者本地資料來源採集、同步到阿里雲上,然後在阿里雲上對資料進行分析和處理,最終完成您的業務要求。本文向您介紹阿里雲各產品的資料採集和同步的操作實戰文章,您可以根據您使用阿里雲產品,檢視相應的文件教程。 關於資料採集,DataWorks專門有一個模組叫做資料整合,是阿里巴巴

【機器學習】迴歸案例實踐資料處理建模調參

# -*- coding: utf-8 -*- """迴歸問題案例.ipynb Automatically generated by Colaboratory. Original file is located at https://colab.research.google

Faster RCNN程式碼詳解(三)資料處理的整體結構

在上一篇部落格中介紹了Faster RCNN網路結構的構建:Faster RCNN程式碼詳解(二):網路結構構建。網路結構是Faster RCNN演算法中最重要兩部分之一,這篇部落格將介紹非常重要的另一部分:資料處理。 資料處理是通過AnchorLoader類

《opencv3程式設計入門》之一影象處理、計算機視覺與opencv

本文是我學習  毛星雲  的《opencv3程式設計入門》一書的學習筆記。 1 影象處理          影象處理是用計算機對影象進行分析,以達到所需結果的技術,又稱影像處理。它包括影象壓縮,增強和復原,匹配、描述和識別三個部分。 2 計算機視覺          計算機

實戰maven私有倉庫三部曲之一搭建和使用

在區域網內搭建maven私有倉庫,可避免每次都從中央倉庫下載公共jar包,另外將A模組作為二方庫釋出到私有倉庫後,B模組可以很方便的引用,今天我們就來實戰maven私有倉庫的搭建和使用; 環境資訊 安裝私有倉庫的機器是ubuntu16,IP是192.1

Docker下ELK三部曲之一極速體驗

《Docker下ELK三部曲》一共三篇文章,為您揭示如何快速搭建ELK環境,以及如何將web應用的日誌上報到ELK用,三部曲內容簡述如下: 1. 極速體驗ELK服務,即本章的內容; 2. 細說技術詳情,例如集成了filebeat服務的映象如何製作,web應用

量化分析師的Python日記【第6天資料處理的瑞士軍刀pandas下篇

原始資料的中很可能存在一些資料的缺失,就如同現在處理的這個樣例資料一樣,處理缺失資料有多種方式。通常使用dataframe.dropna(),dataframe.dropna()可以按行丟棄帶有nan的資料;若指定how='all'(預設是'any'),則只在整行全部是nan時丟棄資料;若指定thresh,則

C語言學習第二課資料處理與互動式輸入

先上一張知識結構圖 一:型別轉換 1、隱式型別轉換(系統自動進行型別轉換) 當賦值發生時,如果兩邊資料型別不一致,C語言中會將等號右邊的資料自動轉換為等號左邊變數的資料型別 double d = 40; //整型資料賦給雙精度浮點型變數 //C系

【網路爬蟲】【java】微博爬蟲(四)資料處理——jsoup工具解析html、dom4j讀寫xml

        之前提到過,對於簡單的網頁結構解析,可以直接通過觀察法、手工寫正則解析,可以做出來,比如網易微博。但是對於結構稍微複雜點的,比如新浪微博,如果還用正則,用眼睛一個個去找,未免太麻煩了。         本文介紹兩個工具包:解析html, xml的jsoup,

Docker下實戰zabbix三部曲之一極速體驗

對於想學習和實踐zabbix的讀者來說,在真實環境搭建一套zabbix系統是件費時費力的事情,本文內容就是用docker來縮減搭建時間,目標是讓讀者們儘快投入zabbix系統的體驗和實踐; 環境資訊 以下是本次操作的環境: 作業系統:MacBook Pro Docker:19.03.2 全系列文章連結: 三

CDH5部署三部曲之一準備工作

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ### 系列

Flink on Yarn三部曲之一準備工作

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ###

CDH+Kylin三部曲之一準備工作

### 歡迎訪問我的GitHub [https://github.com/zq2599/blog_demos](https://github.com/zq2599/blog_demos) 內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等; ###