1. 程式人生 > >Udacity機器學習入門——特徵選擇

Udacity機器學習入門——特徵選擇

練習:一個新的安然特徵練習

poi_flag_emal.py

    if from_emails:
        ctr=0
        while not from_poi and ctr < len(from_emails):
            if from_emails[ctr] in poi_email_list:
                from_poi = True
            ctr += 1

練習:視覺化新特徵

studentCode.py

    ### you fill in this code, so that it returns either
    ###     the fraction of all messages to this person that come from POIs
    ###     or
    ###     the fraction of all messages from this person that are sent to POIs
    ### the same code can be used to compute either quantity

    ### beware of "NaN" when there is no known email address (and so
    ### no filled email features), and integer division!
    ### in case of poi_messages or all_messages having "NaN" value, return 0.
    if poi_messages !='NaN' and all_messages != 'NaN':
        fraction = float(poi_messages)/all_messages
    else:
        fraction =0.

    return fraction

警惕特徵漏洞:

任何人都有可能犯錯—要對你得到的結果持懷疑態度!你應該時刻警惕 100% 準確率。不尋常的主張要有不尋常的證據來支援。如果有特徵過度追蹤你的標籤,那麼它很可能就是一個漏洞!如果你確定它不是漏洞,那麼你很大程度上就不需要機器學習了——你可以只用該特徵來分配標籤。

去除特徵:

什麼情況下回忽略一種特徵:


特徵≠資訊,特徵是特定的試圖獲取資訊的資料點的實際數量或特點

例如:如果你有大量的特徵,你可能擁有大量的資料,而這些特徵的質量就是資訊的內容。我們需要的是儘量多資訊的數量儘量少的特徵,如果你認為特徵沒有能給予你資訊,你就要刪除它。

在 sklearn 中自動選擇特徵有多種輔助方法。多數方法都屬於單變數特徵選擇的範疇,即獨立對待每個特徵並詢問其在分類或迴歸中的能力。

sklearn 中有兩大單變數特徵選擇工具:SelectPercentile SelectKBest。 兩者之間的區別從名字就可以看出:SelectPercentile 選擇最強大的 X% 特徵(X 是引數),而 SelectKBest 選擇 K 個最強大的特徵(K 是引數)。

經典的高偏差情形:使用少量特徵引發高偏差


經典的高方差情形:過多的特徵、過於調整引數


平衡點:使用很少幾個特徵來擬合某種演算法,但是同時就回歸而言,想要得到較大的R方或較低的殘餘誤差平方和

過多特徵造成高方差,泛化能力弱


一種正則化迴歸:Lasso迴歸

一般的線性迴歸是要最大程度地降低擬閤中的平方誤差(即縮短擬合與任何指定資料點之間的距離或距離的平方),Lasso迴歸也要減小平方誤差,但是除了最大化減小平方誤差以外,它還要最大化減小使用的特徵數量,lambda懲罰引數,β描述的是使用的特徵數量,公式原理:使用更多的特徵會有更小的平方誤差,能更精確的擬合這些點,但是會有額外的懲罰,因此需要使用多特徵得到的好處要比形成的損失大。這個公式規定了更少的誤差與使用更少特徵的更簡單的擬合之間的平衡

套索迴歸練習

.coef_ 列印係數

.predict([[2,4]]) 預測

.fit(特徵,標籤)    擬合


特徵選擇迷你專案:

決策樹作為傳統演算法非常容易過擬合,獲得過擬合決策樹最簡單的一種方式就是使用小型訓練集和大量特徵。

1.如果決策樹被過擬合,你期望測試集的準確率是非常高還是相當低? low

2.如果決策樹被過擬合,你期望訓練集的準確率是高還是低?high

3.

    過擬合算法的一種傳統方式是使用大量特徵和少量訓練資料。你可以在 feature_selection/find_signature.py 中找到初始程式碼。準備好決策樹,開始在訓練資料上進行訓練,打印出準確率。

    根據初始程式碼,有多少訓練點?150

### a classic way to overfit is to use a small number
### of data points and a large number of features;
### train on only 150 events to put ourselves in this regime
features_train = features_train[:150].toarray()
labels_train   = labels_train[:150]

4.

你剛才建立的決策樹的準確率是多少?0.950511945392

(記住,我們設定決策樹用於過擬合——理想情況下,我們希望看到的是相對較低的測試準確率。)

5.

    選擇(過擬合)決策樹並使用 feature_importances_ 屬性來獲得一個列表, 其中列出了所有用到的特徵的相對重要性(由於是文字資料,因此列表會很長)。 我們建議迭代此列表並且僅在超過閾值(比如 0.2——記住,所有單詞都同等重要,每個單詞的重要性都低於 0.01)的情況下將特徵重要性打印出來。

    最重要特徵的重要性是什麼?    0.764705882353    該特徵的數字是多少? 36584

(由於文字學習的迷你專案的安然資料集可能不同,沒得到正確答案,因此此處的特徵的數字的答案也只是我自己的答案)

6.

為了確定是什麼單詞導致了問題的發生,你需要返回至 TfIdf,使用你從迷你專案的上一部分中獲得的特徵數量來獲取關聯詞。 你可以在 TfIdf 中呼叫 get_feature_names() 來返回包含所有單詞的列表; 抽出造成大多數決策樹歧視的單詞。

這個單詞是什麼?類似於簽名這種與 Chris Germany 或 Sara Shackleton 唯一關聯的單詞是否講得通?

sshacklensf

7.

    從某種意義上說,這一單詞看起來像是一個異常值,所以讓我們在刪除它之後重新擬合。 返回至 text_learning/vectorize_text.py,使用我們刪除“sara”、“chris”等的方法,從郵件中刪除此單詞。 重新執行 vectorize_text.py,完成以後立即重新執行 find_signature.py

    有跳出其他任何的異常值嗎?是什麼單詞?像是一個簽名型別的單詞?(跟之前一樣,將異常值定義為重要性大於 0.2 的特徵)。cgermannsf

8.

再次更新 vectorize_test.py 後重新執行。然後,再次執行 find_signature.py

是否出現其他任何的重要特徵(重要性大於 0.2)?有多少?它們看起來像“簽名文字”,還是更像來自郵件正文的“郵件內容文字”?

是,還有一個新的重要詞

9.現在決策樹的準確率是多少?0.811149032992

find_signature.py

#!/usr/bin/python

import pickle
import numpy
numpy.random.seed(42)


### The words (features) and authors (labels), already largely processed.
### These files should have been created from the previous (Lesson 10)
### mini-project.
words_file = "../text_learning/your_word_data.pkl" 
authors_file = "../text_learning/your_email_authors.pkl"
word_data = pickle.load( open(words_file, "r"))
authors = pickle.load( open(authors_file, "r") )



### test_size is the percentage of events assigned to the test set (the
### remainder go into training)
### feature matrices changed to dense representations for compatibility with
### classifier functions in versions 0.15.2 and earlier
from sklearn import cross_validation
features_train, features_test, labels_train, labels_test = cross_validation.train_test_split(word_data, authors, test_size=0.1, random_state=42)

from sklearn.feature_extraction.text import TfidfVectorizer
vectorizer = TfidfVectorizer(sublinear_tf=True, max_df=0.5,
                             stop_words='english')
features_train = vectorizer.fit_transform(features_train)
features_test  = vectorizer.transform(features_test).toarray()

words = vectorizer.get_feature_names()
### a classic way to overfit is to use a small number
### of data points and a large number of features;
### train on only 150 events to put ourselves in this regime
features_train = features_train[:150].toarray()
labels_train   = labels_train[:150]



### your code goes here
from sklearn import tree
from sklearn.metrics import accuracy_score

clf = tree.DecisionTreeClassifier()
clf.fit(features_train,labels_train)
#accuracy_score method 1
acc = clf.score(features_test,labels_test)
print acc
#accuracy_score method 2
pred = clf.predict(features_test)
print "Accuracy:", accuracy_score(labels_test, pred)


fi=clf.feature_importances_

print "Important features:"
for index, feature in enumerate(clf.feature_importances_):
    if feature>0.2:
        print "feature no", index
        print "importance", feature
        print "word", words[index]


vectorize_text.py

        stopwords = ["sara", "shackleton", "chris", "germani", "sshacklensf", "cgermannsf"]
        for word in stopwords:
            words = words.replace(word, ' ')
        words = ' '.join(words.split())

相關推薦

Udacity機器學習入門——特徵選擇

練習:一個新的安然特徵練習poi_flag_emal.py if from_emails: ctr=0 while not from_poi and ctr < len(from_emails): if fr

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

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

機器學習Udacity機器學習入門

歡迎關注個人部落格:楓之羽 前言    這部分內容側重於機器學習的應用以及如何使用sklearn和調優。該部分內容基於Udacity的機器學習入門課程,偏重實踐,有興趣的可以看看,也可以一起學習。 1、樸素貝葉斯 訓練分類器 from sklearn.naive_b

機器學習特徵選擇之最小冗餘最大相關性(mRMR)與隨機森林(RF)

特徵選擇之最小冗餘最大相關性(mRMR) 最小冗餘最大相關性(mRMR)是一種濾波式的特徵選擇方法,由Peng et.al提出。主要用途有機器學習,影象識別等。 一種常用的特徵選擇方法是最大化特徵與分類變數之間的相關度,就是選擇與分類變數擁有最高相關度的前k個變數。但是,在特徵選擇中,

機器學習機器學習特徵選擇

機器學習之特徵選擇 特徵選擇方法初識: 1、為什麼要做特徵選擇 在有限的樣本數目下,用大量的特徵來設計分類器計算開銷太大而且分類效能差。 2、特徵選擇的確切含義 將高維空間的樣本通過對映或者是變換的方式轉換到低維空間,達到降維的目的,然後通過特徵選取刪選掉冗餘和不相關的特徵來進一步降維。

Udacity機器學習入門——文字學習

文字學習的基本問題與輸入特徵相關,我們學習的每個檔案、每封郵件或每個書名,它的長度都是不標準的,所以不能講某個單獨的詞作為輸入特徵,因此在文字的機器學習中有個功能——詞袋Bag of Words,基本理念選定一個文字,然後計算文字的頻率Nice Day與A Very Nice

Udacity機器學習入門——交叉驗證(cross-validation)

測試資料可以讓你評估你的分類器或迴歸在獨立資料集上的效能,還能幫助你避免過度擬合在sklearn中訓練/測試分離載入資料集以適應線性SVM:from sklearn import datasets from sklearn.svm import SVC iris = dat

機器學習特徵選擇方法整理

三個問題 1、為什麼特徵選擇? 在有限的樣本數目下,用大量的特徵來設計分類器計算開銷太大而且分類效能差。 2、特徵選擇是什麼? 將高維空間的樣本通過對映或者是變換的方式轉換到低維空間,達到降維的目的,然後通過特徵選取刪選掉冗餘和不相關的特徵來進一步降維。 3、如何進行特徵選取?

Udacity機器學習入門筆記——自選演算法 隨機森林

自選三個演算法之一:隨機森林引數調整學習(Google自帶翻譯ε=(´ο`*))))在ud120-projects\choose_your_own\your_algorithm.py中新增以下程式碼from sklearn.ensemble import RandomFore

Udacity機器學習入門專案3:線性迴歸

1.000, 0.000, 0.000, 0.000 || 0.476 0.000, 1.000, 0.000, 0.000 || 1.500 -0.000, -0.000, 1.000, 0.000 || -0.498 -0.000, -0.000, -0.000,

機器學習特徵選擇概述

轉載出處:http://blog.csdn.net/iezengli/article/details/32686803 一、 背景 1) 問題 在機器學習的實際應用中,特徵數量可能較多,其中可能存在不相關的特徵,特徵之間也可能存在相關性,容易導致如下的後果: 1.  

機器學習入門講解:什麼是特徵特徵選擇

首先我們來看看中文字典裡是怎麼解釋特徵的:一事物異於其他事物的特點。 那我們再來看看英文字典裡是怎麼解釋feature的:A feature of something is an interesting or important part or characteristic of it.

機器學習入門——常用優化器(Optimizer)的種類與選擇

經過前面的學習我們已經瞭解人工神經網路的基本構造,並定義了評價神經網路優劣的指標——代價函式,接下來要做的就是通過優化器不斷改進神經網路來使代價函式最小,而TensorFlow已經為我們提供了幾種常用的優化器: tf.train.Optimizer tf.train.G

Spark機器學習特徵提取、選擇、轉換

本節介紹了處理特徵的演算法,大致分為以下幾組:      1、提取:從“原始”資料提取特徵      2、轉換:縮放,轉換或修改要素      3、選擇:從一組較大的要素中選擇一個子集      4、區域性敏感雜湊(LSH):這類演算法將特徵變換的方面與其他演算法

機器學習特徵工程-特徵選擇

點選“閱讀原文”直接開啟【北京站 | GPU CUDA 進階課程】報名連結 一個基本的資料探勘場景如下: 資料探勘.jpg 從上面的資料探勘場景可知,當資料預處理完成後,我們需要選擇有意義的特徵,輸入機器學習的演算法模型進行訓練。通常來說,從兩個方面考慮來選擇特徵: 特徵是否發散:如果一個特徵

機器學習特徵降維和特徵選擇的區別

       在machine learning中,特徵降維和特徵選擇是兩個常見的概念,在應用machine learning來解決問題的論文中經常會出現。        對於這兩個概念,很多初學者可

『Python』MachineLearning機器學習入門_效率對比

cnblogs 新的 arange 學習 nump 部分 運行 orm blog 效率對比: 老生常談了,不過這次用了個新的模塊, 運行時間測試模塊timeti: 1 import timeit 2 3 normal = timeit.timeit(‘sum(x*

『Python』MachineLearning機器學習入門_極小的機器學習應用

highlight 保存 數值 out 有意思 port del ear 解方程 一個小知識: 有意思的是,scipy囊括了numpy的命名空間,也就是說所有np.func都可以通過sp.func等價調用。 簡介: 本部分對一個互聯網公司的流量進行擬合處理,學習最基本的機器

機器學習入門 - 1. 介紹與決策樹(decision tree)

recursion machine learning programmming 機器學習(Machine Learning) 介紹與決策樹(Decision Tree)機器學習入門系列 是 個人學習過程中的一些記錄與心得。其主要以要點形式呈現,簡潔明了。1.什麽是機器學習?一個比較概括的理解是:

機器學習入門:線性回歸及梯度下降

想要 oom 考試 erl text local oca 希望 觀察 機器學習入門:線性回歸及梯度下降 本文會講到: (1)線性回歸的定義 (2)單變量線性回歸 (3)cost function:評價線性回歸是否擬合訓練集的方法 (4)梯度下