真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python中怎么利用KNN算法處理缺失數(shù)據(jù)

這篇文章將為大家詳細講解有關(guān)Python中怎么利用KNN算法處理缺失數(shù)據(jù),文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關(guān)知識有一定的了解。

創(chuàng)新互聯(lián)公司成立于2013年,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務公司,擁有項目成都做網(wǎng)站、網(wǎng)站建設網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元薩迦做網(wǎng)站,已為上家服務,為薩迦各地企業(yè)和個人服務,聯(lián)系電話:18980820575

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

正如標題所示,我們不會將算法用于分類目的,而是填充缺失值。 本文將使用房屋價格數(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個(任意選擇):

i1 = np.random.choice(a=df.index, size=35)  i2 = np.random.choice(a=df.index, size=20)

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

Python中怎么利用KNN算法處理缺失數(shù)據(jù)

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

df.loc[i1, 'INDUS'] = np.nan  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對象,以便于解釋。 這是代碼:

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

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

Python中怎么利用KNN算法處理缺失數(shù)據(jù)

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

歸因優(yōu)化

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

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

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

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

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

  • 使用當前的K值執(zhí)行插補

  • 將數(shù)據(jù)集分為訓練和測試子集

  • 擬合隨機森林模型

  • 預測測試集

  • 使用RMSE進行評估

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

def optimize_k(data, target):     errors = []     for k in range(1, 20, 2):         imputer = KNNImputer(n_neighbors=k)         imputed = imputer.fit_transform(data)         df_imputed = pd.DataFrame(imputed, columns=df.columns)                  X = df_imputed.drop(target, axis=1)         y = df_imputed[target]         X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)          model = RandomForestRegressor()         model.fit(X_train, y_train)         preds = model.predict(X_test)         error = rmse(y_test, preds)         errors.append({'K': k, 'RMSE': error})              return errors

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

k_errors = optimize_k(data=df, target='MEDV')

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

Python中怎么利用KNN算法處理缺失數(shù)據(jù)

以視覺方式表示:

Python中怎么利用KNN算法處理缺失數(shù)據(jù)

關(guān)于Python中怎么利用KNN算法處理缺失數(shù)據(jù)就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。


當前文章:Python中怎么利用KNN算法處理缺失數(shù)據(jù)
網(wǎng)站路徑:http://weahome.cn/article/jcjcoh.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部