Udacity-異常值

1.產生異常值的原因

image.png

2.異常值檢測/刪除算法

a.訓練所有的數(shù)據
b.去除錯誤的點丹鸿,一般占10%
c.對當前減小后的數(shù)據集在進行訓練

3.迷你項目

此項目有兩部分确徙。在第一部分中將運行回歸毒返,然后識別并刪除具有最大殘差的 10% 的點曙蒸。然后老厌,根據 Sebastian 在課程視頻中所建議的扣草,從數(shù)據集中刪除那些異常值并重新擬合回歸忽媒。

在第二部分中膛锭,你將熟悉安然財務數(shù)據中的一些異常值寓辱,并且了解是否/如何刪除它們艘绍。

帶有異常值的回歸斜率

Sebastian 向我們描述了改善回歸的一個算法,你將在此項目中實現(xiàn)該算法秫筏。你將在接下來的幾個測試題中運用這一算法诱鞠。總的來說这敬,你將在所有訓練點上擬合回歸航夺。舍棄在實際 y 值和回歸預測 y 值之間有最大誤差的 10% 的點。

先開始運行初始代碼 (outliers/outlier_removal_regression.py) 和可視化點崔涂。一些異常值應該會跳出來阳掐。部署一個線性回歸,其中的凈值是目標,而用來進行預測的特征是人的年齡(記得在訓練數(shù)據上進行訓練C场)觅闽。

數(shù)據點主體的正確斜率是 6.25(我們之所以知道,是因為我們使用該值來生成數(shù)據)涮俄;你的回歸的斜率是多少蛉拙?

#!/usr/bin/python

import random
import numpy
import matplotlib.pyplot as plt
import pickle

from outlier_cleaner import outlierCleaner


### load up some practice data with outliers in it
ages = pickle.load( open("practice_outliers_ages.pkl", "r") )
net_worths = pickle.load( open("practice_outliers_net_worths.pkl", "r") )



### ages and net_worths need to be reshaped into 2D numpy arrays
### second argument of reshape command is a tuple of integers: (n_rows, n_columns)
### by convention, n_rows is the number of data points
### and n_columns is the number of features
ages       = numpy.reshape( numpy.array(ages), (len(ages), 1))
net_worths = numpy.reshape( numpy.array(net_worths), (len(net_worths), 1))
from sklearn.cross_validation import train_test_split
ages_train, ages_test, net_worths_train, net_worths_test = train_test_split(ages, net_worths, test_size=0.1, random_state=42)

### fill in a regression here!  Name the regression object reg so that
### the plotting code below works, and you can see what your regression looks like


from sklearn.linear_model import LinearRegression
reg = LinearRegression()
reg.fit(ages_train,net_worths_train)
y_pred = reg.predict(ages_test)
print 'Slope %.2f' % reg.coef_
print 'Score %.2f' % reg.score(ages_test,net_worths_test)








try:
    plt.plot(ages, reg.predict(ages), color="blue")
except NameError:
    pass
plt.scatter(ages, net_worths)
plt.show()


### identify and remove the most outlier-y points
cleaned_data = []
try:
    predictions = reg.predict(ages_train)
    cleaned_data = outlierCleaner( predictions, ages_train, net_worths_train )
except NameError:
    print "your regression object doesn't exist, or isn't name reg"
    print "can't make predictions to use in identifying outliers"







### only run this code if cleaned_data is returning data
if len(cleaned_data) > 0:
    ages, net_worths, errors = zip(*cleaned_data)
    ages       = numpy.reshape( numpy.array(ages), (len(ages), 1))
    net_worths = numpy.reshape( numpy.array(net_worths), (len(net_worths), 1))

    ### refit your cleaned data!
    try:
        reg.fit(ages, net_worths)
        plt.plot(ages, reg.predict(ages), color="blue")
    except NameError:
        print "you don't seem to have regression imported/created,"
        print "   or else your regression object isn't named reg"
        print "   either way, only draw the scatter plot of the cleaned data"
    plt.scatter(ages, net_worths)
    plt.xlabel("ages")
    plt.ylabel("net worths")
    plt.show()


else:
    print "outlierCleaner() is returning an empty list, no refitting to be done"

image.png
清理后的斜率

你將在 outliers/outlier_cleaner.py 中找到 outlierCleaner() 函數(shù)的骨架并向其填充清理算法。用到的三個參數(shù)是:predictions 是一個列表彻亲,包含回歸的預測目標孕锄;ages 也是一個列表,包含訓練集內的年齡苞尝;net_worths 是訓練集內凈值的實際值畸肆。每個列表中應有 90 個元素(因為訓練集內有 90 個點)。你的工作是返回一個名叫cleaned_data 的列表宙址,該列表中只有 81 個元素轴脐,也即預測值和實際值 (net_worths) 具有最小誤差的 81 個訓練點 (90 * 0.9 = 81)。cleaned_data 的格式應為一個元組列表抡砂,其中每個元組的形式均為 (age, net_worth, error)大咱。

一旦此清理函數(shù)運行起來,你應該能看到回歸結果發(fā)生了變化注益。新斜率是多少碴巾?是否更為接近 6.25 這個“正確”結果?

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末丑搔,一起剝皮案震驚了整個濱河市厦瓢,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌啤月,老刑警劉巖煮仇,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異顽冶,居然都是意外死亡欺抗,警方通過查閱死者的電腦和手機售碳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門强重,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人贸人,你說我怎么就攤上這事间景。” “怎么了艺智?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵倘要,是天一觀的道長。 經常有香客問我,道長封拧,這世上最難降的妖魔是什么志鹃? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮泽西,結果婚禮上曹铃,老公的妹妹穿的比我還像新娘。我一直安慰自己捧杉,他們只是感情好陕见,可當我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著味抖,像睡著了一般评甜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上仔涩,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天忍坷,我揣著相機與錄音,去河邊找鬼熔脂。 笑死承匣,一個胖子當著我的面吹牛,可吹牛的內容都是我干的锤悄。 我是一名探鬼主播韧骗,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼零聚!你這毒婦竟也來了袍暴?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤隶症,失蹤者是張志新(化名)和其女友劉穎政模,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蚂会,經...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡淋样,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了胁住。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趁猴。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖彪见,靈堂內的尸體忽然破棺而出儡司,到底是詐尸還是另有隱情,我是刑警寧澤余指,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布捕犬,位于F島的核電站,受9級特大地震影響,放射性物質發(fā)生泄漏碉碉。R本人自食惡果不足惜柴钻,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望垢粮。 院中可真熱鬧顿颅,春花似錦、人聲如沸足丢。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽斩跌。三九已至绍些,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間耀鸦,已是汗流浹背柬批。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留袖订,地道東北人氮帐。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像洛姑,于是被迫代替她去往敵國和親上沐。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,685評論 2 360

推薦閱讀更多精彩內容