1. 程式人生 > >機器學習筆記--特徵工程

機器學習筆記--特徵工程

特徵提取後常常會有許多問題,如缺失值問題/不屬於同一綱量問題/資訊冗餘問題/資訊利用率低問題.
以下使用鳶尾花資料集進行處理.
匯入鳶尾花資料:

from sklearn.datasets import load_iris
iris = load_iris()

資料預處理

無綱量化:

將不同規格資料轉換為同一規格.

1.標準化

基於特徵矩陣的列,將特徵值轉換至服從標準正態分佈.

x=xX¯S

from sklearn.preprocessing import StandardScaler
StandardScaler().fit_transform(iris.data
)

2.區間縮放法

區間縮放法的思路有多種,常見的一種為利用兩個最值進行縮放.

x=xMinMaxMin

from sklearn.preprocessing import MinMaxScaler
MinMaxScaler().fit_transform(iris.data)

3.歸一化

歸一化是依照特徵矩陣的行處理資料,其目的在於樣本向量在點乘運算或其他核函式計算相似性時,擁有統一的標準,也就是說都轉化為“單位向量”。規則為L2的歸一化公式:

x=xnix2i

from sklearn.preprocessing import Normalizer
Normalizer().fit_transform(iris.data)

定量特徵二值化:

設定一個閾值,大於閾值的賦值為1,小於等於閾值的賦值為0

這裡寫圖片描述

鳶尾花資料集:

分別對鳶尾花資料集進行標準化/區間縮放/歸一化/二值化處理

# 特徵工程
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
iris = load_iris()

x = np.arange(len(iris.data))
iris0 = [iris.data[i][0] for i in
range(len(iris.data))] iris1 = [iris.data[i][1] for i in range(len(iris.data))] iris2 = [iris.data[i][2] for i in range(len(iris.data))] iris3 = [iris.data[i][3] for i in range(len(iris.data))] from sklearn.preprocessing import StandardScaler from sklearn.preprocessing import MinMaxScaler from sklearn.preprocessing import Normalizer from sklearn.preprocessing import Binarizer from sklearn.preprocessing import OneHotEncoder print OneHotEncoder().fit_transform(iris.target.reshape((-1,1))) plt.subplot(511), plt.plot(x, iris0, 'ys', x, iris1, 'g^', x, iris2, 'co', x, iris3, 'r*') for index in range(4): if index == 0: # 標準化--標準化需要計算特徵的均值和標準差 iris_standard = StandardScaler().fit_transform(iris.data) elif index == 1: # 區間縮放法--常見的為利用兩個最值進行縮放 iris_standard = MinMaxScaler().fit_transform(iris.data) elif index == 2: # 標準化與歸一化的區別-- iris_standard = Normalizer().fit_transform(iris.data) elif index == 3: # 標準化與歸一化的區別-- iris_standard = Binarizer(threshold=3).fit_transform(iris.data) iris_standard0 = [iris_standard[i][0] for i in range(len(iris_standard))] iris_standard1 = [iris_standard[i][1] for i in range(len(iris_standard))] iris_standard2 = [iris_standard[i][2] for i in range(len(iris_standard))] iris_standard3 = [iris_standard[i][3] for i in range(len(iris_standard))] plt.subplot(512+index), plt.plot(x, iris_standard0, 'ys', x, iris_standard1, 'g^', x, iris_standard2, 'co', x, iris_standard3, 'r*') plt.show()

顯示輸出:

這裡寫圖片描述

分別使用鳶尾花資料的第1/2/3個特徵作為x/y/z軸的座標值,使用第四的特徵作為座標點的顏色指標,可以看到鳶尾花資料的大致分佈情況如圖:

# # 特徵工程
import numpy as np
from sklearn.datasets import load_iris
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
from sklearn.preprocessing import StandardScaler
from sklearn.preprocessing import MinMaxScaler
from sklearn.preprocessing import Normalizer
from sklearn.preprocessing import Binarizer

iris = load_iris()

index = 0

if index == 0:
    # 原始資料
    iris_standard = iris.data
elif index == 1:
    # 標準化--標準化需要計算特徵的均值和標準差
    iris_standard = StandardScaler().fit_transform(iris.data)
elif index == 2:
    # 區間縮放法--常見的為利用兩個最值進行縮放
    iris_standard = MinMaxScaler().fit_transform(iris.data)
elif index == 3:
    # 歸一化
    iris_standard = Normalizer().fit_transform(iris.data)
elif index == 4:
    # 定量特徵二值化--設定一個閾值,大於閾值的賦值為1,小於等於閾值的賦值為0
    iris_standard = Binarizer(threshold=3).fit_transform(iris.data)


iris0 = [iris_standard[i][0] for i in range(len(iris_standard))]
iris1 = [iris_standard[i][1] for i in range(len(iris_standard))]
iris2 = [iris_standard[i][2] for i in range(len(iris_standard))]
iris3 = [iris_standard[i][3] for i in range(len(iris_standard))]

# iris3 = iris.target

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d', axisbg= 'k')

xs = iris0
ys = iris1
zs = iris2

cm = plt.cm.get_cmap('RdYlBu')
ax.scatter(xs, ys, zs, c=iris3, vmin=min(iris3), vmax=max(iris3), s=10, cmap=cm, marker='o',linewidth=2, antialiased=True)
ax.set_xlabel('X Label')
ax.set_ylabel('Y Label')
ax.set_zlabel('Z Label')

plt.show()

這裡寫圖片描述

相關推薦

機器學習筆記4:特徵工程

一、特徵工程概述       “資料決定了機器學習的上限,而演算法只是儘可能逼近這個上限”,這裡的資料指的就是經過特徵工程得到的資料。特徵工程指的是把原始資料轉變為模型的訓練資料的過程,它的目的就是獲取更好的訓練資料特徵,使得機器學習模型逼近這個上限。特徵工程能使得模型的效能

機器學習筆記(十一)特徵選擇和稀疏學習

建議檢視原貼  轉載只是為了方便複習,查詢 11.特徵選擇和稀疏學習 11.1子集搜尋與評價 物件都有很多屬性來描述,屬性也稱為特徵(feature),用於刻畫物件的某一個特性。對一個學習任務而言,有些屬性是關鍵有用的,而有些屬性則可能不必要納入訓練資料。對當前學習任務

機器學習深入與強化--特徵工程

機器學習演算法是一個架子,特徵需要我們自己去處理,做出更好的特徵,讓演算法去學習,從而達到更好的效果。 意義中靈活性指的是,如果使用的是簡單的LR,處理起來更靈活,更好控制。 做的都是一些基礎的事

機器學習中的「特徵工程」到底是什麼?

1 特徵工程是什麼? 有這麼一句話在業界廣泛流傳:資料和特徵決定了機器學習的上限,而模型和演算法只是逼近這個上限而已。那特徵工程到底是什麼呢?顧名思義,其本質是一項工程活動,目的是最大限度地從原始資料中提取特徵以供演算法和模型使用。通過總結和歸納,人們認為特徵工程包

機器學習筆記特徵工程

特徵提取後常常會有許多問題,如缺失值問題/不屬於同一綱量問題/資訊冗餘問題/資訊利用率低問題. 以下使用鳶尾花資料集進行處理. 匯入鳶尾花資料: from sklearn.datasets import load_iris iris = load_ir

機器學習筆記樸素貝葉斯 &三種模型&sklearn應用

樸素貝葉斯 Naive Bayes 貝葉斯定理 根據條件概率公式: 在B條件下A發生的概率: P(A∣B)=P(AB)P(B) 在A條件下B發生的概率: P(B∣A)=P(AB)P(A) 則 P(A∣B)P(B)=P(AB)=P(B∣A)P(A)

算法導論學習筆記(2)歸並排序

mar 今天 iostream 介紹 font 額外 遞歸 size dsm 今天學習了算法導論上的歸並排序算法,而且完畢了在紙上寫出偽代碼,曾經就學過歸並可是理解的不夠透徹。以 前還一直困惑:為什麽明明歸並排序比快排的時間復雜度更穩定。為什麽庫函數不用歸

機器學習筆記——特徵選擇

常見的特徵選擇方法大致可分為三類: 過濾式:過濾式方法先對資料集進行特徵選擇,然後再訓練學習器,特徵選擇過程與後續學習器無關。這相當於先用特徵選擇過程對初始特徵進行“過濾”,再用過濾後的特徵來訓練模型。 包裹式:包裹式特徵選擇直接把最終將要使用的學習器的效能作為特徵子集的評價標準。換言之,包

《C++程式設計語言》學習筆記1容器

容器 容器名 資料結構 vector<T> 可變大小向量 list<T> 雙向連結串列 forward_list<T> 單向連結串列 deque<T> 雙端佇列 set<T&g

php學習筆記6 header dirname 以及大括號的作用

php學習筆記6 header dirname 以及大括號的作用 常用函式 header(); 用於傳送原生的http頭 <?php header("HTTP/1.0 404 Not Foun

live555學習筆記5RTSP服務運作

五 RTSP服務運作 基礎基本搞明白了,那麼RTSP,RTP等這些協議又是如何利用這些基礎機制運作的呢? 首先來看RTSP. RTSP首先需建立TCP偵聽socket。可見於此函式: [cpp] view plaincopyprint? DynamicRTSPServ

機器學習結果統計準確率、召回率,F1-score

用手寫數字識別來作為說明。 準確率: 所有識別為”1”的資料中,正確的比率是多少。  如識別出來100個結果是“1”, 而只有90個結果正確,有10個實現是非“1”的資料。 所以準確率就為90% 召回率: 所有樣本為1的資料中,最後真正識別出1的比率。  如100個樣本”

機器學習筆記14-特徵選擇

機器學習筆記14-特徵選擇 為什麼要進行特徵選擇:(1)減輕維數災難的問題,這與降維的動機相似;(2)去除不相關的特徵會降低學習難度。 如何構建特徵選擇子集:(1)前向搜尋:逐個新增特徵;(2)後向搜尋:從所有特徵中逐個剔除特徵。 如何評價特徵選擇子集:資訊增益 常見的特徵選擇方法大致可

spark機器學習筆記:(二)用Spark Python進行資料處理和特徵提取

下面用“|”字元來分隔各行資料。這將生成一個RDD,其中每一個記錄對應一個Python列表,各列表由使用者ID(user ID)、年齡(age)、性別(gender)、職業(occupation)和郵編(ZIP code)五個屬性構成。4之後再統計使用者、性別、職業和郵編的數目。這可通過如下程式碼

機器學習筆記9——特徵選擇

無限假設類H的情況 上一章針對包含有限個假設類的情況,我們已經證明了一些有用的理論。但是針對包含無限假設的假設類,我們是否能得出類似的結論? 假設給定一個假設類H,存在d個實數引數。因為我們使用電腦代表真實值的話,用雙精度浮點數64bits(位)代表一個實數

AlexNet學習筆記1ImageNet Classification with Deep Convolutional Neural Networks

引言 最近受AlphaGo的刺激,開始從google新開源的Tensorflow庫學習DeepLearning。便匆匆忙忙的把環境搭建好,配合官網教程學習原始碼,但是由於之前沒在意機器學習這塊的知識,感覺拉下了不少功課,在Image Recognition章的

Live555學習筆記14live555多執行緒論

十四:live555多執行緒論 江湖傳聞:live555如果不改為多執行緒,在多核心機器上效率會降低. 雖然我沒做過測試,但比較相信此傳聞的真實性 . 所以在我試論述一下live555如何對多核進行支援,其實就是改為多執行緒,嘿嘿. 先看此文:http://www.live555.com/liveMedia

live555學習筆記1引子

一直想研究live555,沒有時間,終於因為專案的原因可以深入無間地研究一下了.所以在此著文以記之. 一 如何編譯live555 利用mingw環境很容易:在live555資料夾下, genMakefiles mingw make 即可. 可以用genWi

一、降維——機器學習筆記——降維(特徵提取)

目錄 2、示例  一、為什麼要降維 維數災難:在給定精度下,準確地對某些變數的函式進行估計,所需樣本量會隨著樣本維數的增加而呈指數形式增長。 降維的意義:克服維數災難,獲取本質特徵,節省儲存空間,去除無用噪聲,實現資料視覺化

斯坦福大學機器學習筆記——特徵和多項式迴歸以及正規方程

我們可以舉一個例子來引入多項式迴歸: 比如我們之前遇到的房價問題,對於房價的影響我們假設有兩個特徵,一個是房子的寬度x1,另外一個是房子的長度x2,這針對房價的估測我們可以建立下面形式的假設: hθ