成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

在Python中使用KNN算法處理缺失的數(shù)據(jù)

開發(fā) 后端 大數(shù)據(jù) 算法
處理缺失的數(shù)據(jù)并不是一件容易的事。 方法的范圍從簡單的均值插補和觀察值的完全刪除到像MICE這樣的更高級的技術(shù)。 解決問題的挑戰(zhàn)性是選擇使用哪種方法。 今天,我們將探索一種簡單但高效的填補缺失數(shù)據(jù)的方法-KNN算法。

處理缺失的數(shù)據(jù)并不是一件容易的事。 方法的范圍從簡單的均值插補和觀察值的完全刪除到像MICE這樣的更高級的技術(shù)。 解決問題的挑戰(zhàn)性是選擇使用哪種方法。 今天,我們將探索一種簡單但高效的填補缺失數(shù)據(jù)的方法-KNN算法。

 

[[348243]]

KNN代表" K最近鄰居",這是一種簡單算法,可根據(jù)定義的最接近鄰居數(shù)進行預(yù)測。 它計算從您要分類的實例到訓練集中其他所有實例的距離。

正如標題所示,我們不會將算法用于分類目的,而是填充缺失值。 本文將使用房屋價格數(shù)據(jù)集,這是一個簡單而著名的數(shù)據(jù)集,僅包含500多個條目。

這篇文章的結(jié)構(gòu)如下:

  • 數(shù)據(jù)集加載和探索
  • KNN歸因
  • 歸因優(yōu)化
  •  結(jié)論

數(shù)據(jù)集加載和探索

如前所述,首先下載房屋數(shù)據(jù)集。 另外,請確保同時導入了Numpy和Pandas。 這是前幾行的外觀:

 

在python中使用KNN算法處理缺失的數(shù)據(jù)

默認情況下,數(shù)據(jù)集缺失值非常低-單個屬性中只有五個:

 

在python中使用KNN算法處理缺失的數(shù)據(jù)

讓我們改變一下。 您通常不會這樣做,但是我們需要更多缺少的值。 首先,我們創(chuàng)建兩個隨機數(shù)數(shù)組,其范圍從1到數(shù)據(jù)集的長度。 第一個數(shù)組包含35個元素,第二個數(shù)組包含20個(任意選擇):

 

  1. i1 = np.random.choice(a=df.indexsize=35)  
  2. i2 = np.random.choice(a=df.indexsize=20) 

這是第一個數(shù)組的樣子:

 

在python中使用KNN算法處理缺失的數(shù)據(jù)

您的數(shù)組將有所不同,因為隨機化過程是隨機的。 接下來,我們將用NAN替換特定索引處的現(xiàn)有值。 這是如何做:

 

  1. df.loc[i1, 'INDUS'] = np.nan  
  2. df.loc[i2, 'TAX'] = np.nan 

現(xiàn)在,讓我們再次檢查缺失值-這次,計數(shù)有所不同:

 

在python中使用KNN算法處理缺失的數(shù)據(jù)

這就是我們從歸因開始的全部前置工作。 讓我們在下一部分中進行操作。

KNN歸因

整個插補可歸結(jié)為4行代碼-其中之一是庫導入。 我們需要sklearn.impute中的KNNImputer,然后以一種著名的Scikit-Learn方式創(chuàng)建它的實例。 該類需要一個強制性參數(shù)– n_neighbors。 它告訴冒充參數(shù)K的大小是多少。

首先,讓我們選擇3的任意數(shù)字。稍后我們將優(yōu)化此參數(shù),但是3足以啟動。 接下來,我們可以在計算機上調(diào)用fit_transform方法以估算缺失的數(shù)據(jù)。

最后,我們將結(jié)果數(shù)組轉(zhuǎn)換為pandas.DataFrame對象,以便于解釋。 這是代碼:

 

  1. from sklearn.impute import KNNImputer 
  2.  
  3. imputer = KNNImputer(n_neighbors=3) 
  4. imputed = imputer.fit_transform(df) 
  5. df_imputed = pd.DataFrame(imputed, columns=df.columns) 

非常簡單。 讓我們現(xiàn)在檢查缺失值:

 

在python中使用KNN算法處理缺失的數(shù)據(jù)

盡管如此,仍然存在一個問題-我們?nèi)绾螢镵選擇正確的值?

歸因優(yōu)化

該住房數(shù)據(jù)集旨在通過回歸算法進行預(yù)測建模,因為目標變量是連續(xù)的(MEDV)。 這意味著我們可以訓練許多預(yù)測模型,其中使用不同的K值估算缺失值,并查看哪個模型表現(xiàn)最佳。

但首先是導入。 我們需要Scikit-Learn提供的一些功能-將數(shù)據(jù)集分為訓練和測試子集,訓練模型并進行驗證。 我們選擇了"隨機森林"算法進行訓練。 RMSE用于驗證:

 

  1. from sklearn.model_selection import train_test_split 
  2. from sklearn.ensemble import RandomForestRegressor 
  3. from sklearn.metrics import mean_squared_error 
  4.  
  5. rmse = lambda y, yhat: np.sqrt(mean_squared_error(y, yhat)) 

以下是執(zhí)行優(yōu)化的必要步驟:

迭代K的可能范圍-1到20之間的所有奇數(shù)都可以

  • 使用當前的K值執(zhí)行插補
  • 將數(shù)據(jù)集分為訓練和測試子集
  • 擬合隨機森林模型
  • 預(yù)測測試集
  • 使用RMSE進行評估

聽起來很多,但可以歸結(jié)為大約15行代碼。 這是代碼段:

 

  1. def optimize_k(data, target): 
  2.     errors = [] 
  3.     for k in range(1, 20, 2): 
  4.         imputer = KNNImputer(n_neighbors=k) 
  5.         imputed = imputer.fit_transform(data) 
  6.         df_imputed = pd.DataFrame(imputed, columns=df.columns) 
  7.          
  8.         X = df_imputed.drop(target, axis=1) 
  9.         y = df_imputed[target] 
  10.         X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42) 
  11.  
  12.         model = RandomForestRegressor() 
  13.         model.fit(X_train, y_train) 
  14.         preds = model.predict(X_test) 
  15.         error = rmse(y_test, preds) 
  16.         errors.append({'K': k, 'RMSE': error}) 
  17.          
  18.     return errors 

現(xiàn)在,我們可以使用修改后的數(shù)據(jù)集(在3列中缺少值)調(diào)用optimize_k函數(shù),并傳入目標變量(MEDV):

  1. k_errors = optimize_k(data=df, target='MEDV'

就是這樣! k_errors數(shù)組如下所示:

 

在python中使用KNN算法處理缺失的數(shù)據(jù)

以視覺方式表示:

 

在python中使用KNN算法處理缺失的數(shù)據(jù)

看起來K = 15是給定范圍內(nèi)的最佳值,因為它導致最小的誤差。 我們不會涵蓋該錯誤的解釋,因為它超出了本文的范圍。 讓我們在下一節(jié)中總結(jié)一下。

總結(jié)

編寫處理缺少數(shù)據(jù)歸因的代碼很容易,因為有很多現(xiàn)有的算法可以讓我們直接使用。 但是我們很難理解里面原因-了解應(yīng)該推定哪些屬性,不應(yīng)該推算哪些屬性。 例如,可能由于客戶未使用該類型的服務(wù)而缺失了某些值,因此沒有必要執(zhí)行估算。

最終確定是否需要進行缺失數(shù)據(jù)的處理,還需要有領(lǐng)域的專業(yè)知識,與領(lǐng)域?qū)<疫M行咨詢并研究領(lǐng)域是一種很好的方法。

責任編輯:未麗燕 來源: 今日頭條
相關(guān)推薦

2018-04-26 14:11:44

2021-12-24 11:25:37

FreeDOS批處理文件Linux

2023-10-09 12:43:01

Python數(shù)據(jù)信息

2010-07-30 10:53:53

Flex數(shù)據(jù)綁定

2023-12-13 09:00:00

2009-02-27 17:15:05

XMLDOMXPath

2010-03-10 14:03:41

python處理文本

2018-05-11 15:36:43

數(shù)據(jù)科學算法數(shù)據(jù)分析

2019-01-17 10:25:56

Python編程語言程序員

2022-08-02 11:31:46

Python語法代碼

2009-04-10 22:06:09

Vmwareesx虛擬化

2013-12-13 17:21:14

Lua腳本語言

2009-06-25 16:49:24

Hibernate

2023-11-17 12:04:39

GORM并發(fā)

2023-04-12 15:25:09

Bytrace鴻蒙

2011-05-12 18:14:29

算法

2016-11-14 15:04:35

大數(shù)據(jù)信用風險評估

2015-03-25 12:55:48

2011-05-27 08:48:13

Android HTML

2022-04-20 11:22:23

大數(shù)據(jù)安全建筑數(shù)據(jù)
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 老妇激情毛片免费 | 精品一区二区三区中文字幕 | 欧美日韩中文字幕在线 | 黄色在线免费观看 | 日韩午夜 | 一区二区三区在线播放 | 国产精品免费一区二区三区 | 国产一区二区 | 久久亚洲一区二区三区四区 | 久久的色 | 国内自拍偷拍视频 | 日韩精品免费视频 | 欧美精品久久 | 97超碰人人| 国产午夜精品视频 | 欧美专区在线 | 亚洲国产高清高潮精品美女 | 亚洲精品一区中文字幕 | 欧美国产日韩一区二区三区 | 国产女人第一次做爰毛片 | 国产精品免费一区二区三区四区 | 在线国产一区二区 | 国产精品一区二区欧美黑人喷潮水 | 色爱综合网 | 久久综合狠狠综合久久 | 91麻豆蜜桃一区二区三区 | 国产精品免费一区二区三区四区 | 日韩精品成人 | 色婷婷激情 | 91久久精| 色欧美综合 | a级黄色片在线观看 | 亚洲综合国产精品 | 羞羞的视频网站 | 中午字幕在线观看 | www国产成人免费观看视频 | 日韩1区| 亚洲欧美中文日韩在线v日本 | 欧美精品欧美精品系列 | 国产精品福利视频 | 秋霞a级毛片在线看 |