日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

對于數據科學家來說,處理丟失的數據是數據清理和模型開發過程中的一個重要部分。通常情況下,真實數據包含多個稀疏字段或包含錯誤值的字段。在這篇文章中,我們將討論如何建立可以用來填補數據中缺失或錯誤值的模型。

出于我們的目的,我們將使用可以在這里找到的葡萄酒數據集:https://www.kaggle.com/zynicide/wine-reviews

import pandas as pd
df = pd.read_csv("winemag-data-130k-v2.csv")

接下來,讓我們輸出前五行數據:

print(df.head())
使用Python預測缺失值

 


使用Python預測缺失值

 

讓我們從這些數據中隨機抽取500條記錄。這將有助于加快模型訓練和測試,盡管讀者可以很容易地對其進行修改:

import pandas as pd
df = pd.read_csv("winemag-data-130k-v2.csv").sample(n=500, random_state = 42)

現在,讓我們打印與數據對應的信息,這將使我們了解哪些列缺少值:

print(df.info())
使用Python預測缺失值

 

有幾個列的非空值小于500,這與缺少的值相對應。首先,讓我們考慮建立一個模型,用“points”來估算缺失的“price”值。首先,讓我們打印“price”和“points”之間的相關性:

print("Correlation: ", df['points'].corr(df['price']))
使用Python預測缺失值

 

我們看到了一個微弱的正相關。讓我們建立一個線性回歸模型,用“points”來預測“price”。首先,讓我們從“scikit learn”導入“LinearRegresssion”模塊:

from sklearn.linear_model import LinearRegression

現在,讓我們為訓練和測試拆分數據。我們希望能夠預測缺失值,但我們應該使用真實值“price”來驗證我們的預測。讓我們通過只選擇正價格值來篩選缺少的值:

import numpy as np 
df_filter = df[df['price'] > 0].copy()

我們還可以初始化用于存儲預測和實際值的列表:

y_pred = []
y_true = []

我們將使用K-fold交叉驗證來驗證我們的模型。讓我們從“scikit learn”導入“KFolds”模塊。我們將使用10折來驗證我們的模型:

from sklearn.model_selection import KFold
kf = KFold(n_splits=10, random_state = 42)
for train_index, test_index in kf.split(df_filter):
    df_test = df_filter.iloc[test_index]    df_train = df_filter.iloc[train_index]

我們現在可以定義我們的輸入和輸出:

for train_index, test_index in kf.split(df_filter):
    ...    X_train = np.array(df_train['points']).reshape(-1, 1)     
    y_train = np.array(df_train['price']).reshape(-1, 1)
    X_test = np.array(df_test['points']).reshape(-1, 1)  
    y_test = np.array(df_test['price']).reshape(-1, 1)

并擬合我們的線性回歸模型:

for train_index, test_index in kf.split(df_filter):
    ...    model = LinearRegression()    model.fit(X_train, y_train)

現在讓我們生成并存儲我們的預測:

for train_index, test_index in kf.split(df_filter):
    ...    y_pred.Append(model.predict(X_test)[0])
    y_true.append(y_test[0])

現在讓我們評估一下模型的性能。讓我們用均方誤差來評估模型的性能:

print("Mean Square Error: ", mean_squared_error(y_true, y_pred))
使用Python預測缺失值

 

并不太好。我們可以通過訓練平均價格加上一個標準差來改善這一點:

df_filter = df[df['price'] <= df['price'].mean() + df['price'].std() ].copy()
...print("Mean Square Error: ", mean_squared_error(y_true, y_pred))
使用Python預測缺失值

 

雖然這大大提高了性能,但其代價是無法準確估算葡萄酒的price。與使用單一特征的回歸模型預測價格不同,我們可以使用樹基模型,例如隨機森林模型,它可以處理類別和數值變量。

讓我們建立一個隨機森林回歸模型,使用“country”、“province”、“variety”、“winery”和“points”來預測葡萄酒的“price”。首先,讓我們將分類變量轉換為可由隨機森林模型處理的分類代碼:

df['country_cat'] = df['country'].astype('category')
df['country_cat'] = df['country_cat'].cat.codes
df['province_cat'] = df['province'].astype('category')
df['province_cat'] = df['province_cat'].cat.codes
df['winery_cat'] = df['winery'].astype('category')
df['winery_cat'] = df['winery_cat'].cat.codes
df['variety_cat'] = df['variety'].astype('category')
df['variety_cat'] = df['variety_cat'].cat.codes

讓我們將隨機樣本大小增加到5000:

df = pd.read_csv("winemag-data-130k-v2.csv").sample(n=5000, random_state = 42)

接下來,讓我們從scikit learn導入隨機森林回歸器模塊。我們還可以定義用于訓練模型的特征列表:

from sklearn.ensemble import RandomForestRegressor
features = ['points', 'country_cat', 'province_cat', 'winery_cat', 'variety_cat']

讓我們用一個隨機森林來訓練我們的模型,它有1000個估計量,最大深度為1000。然后,讓我們生成預測并將其附加到新列表中:

for train_index, test_index in kf.split(df_filter):
    df_test = df_filter.iloc[test_index]    df_train = df_filter.iloc[train_index]    X_train = np.array(df_train[features])
    y_train = np.array(df_train['price'])
    X_test = np.array(df_test[features])
    y_test = np.array(df_test['price'])
    model = RandomForestRegressor(n_estimators = 1000, max_depth = 1000, random_state = 42)
    model.fit(X_train, y_train)    y_pred_rf.append(model.predict(X_test)[0])
    y_true_rf.append(y_test[0])

最后,讓我們評估隨機森林和線性回歸模型的均方誤差:

print("Mean Square Error (Linear Regression): ", mean_squared_error(y_true, y_pred))
print("Mean Square Error (Random Forest): ", mean_squared_error(y_pred_rf, y_true_rf))
使用Python預測缺失值

 

我們看到隨機森林模型具有優越的性能。現在,讓我們使用我們的模型預測缺失的價格值,并顯示price預測:

df_missing = df[df['price'].isnull()].copy()
X_test_lr = np.array(df_missing['points']).reshape(-1, 1)
X_test_rf = np.array(df_missing[features])
X_train_lr = np.array(df_filter['points']).reshape(-1, 1)    
y_train_lr = np.array(df_filter['price']).reshape(-1, 1)
X_train_rf = np.array(df_filter[features])
y_train_rf = np.array(df_filter['price'])
model_lr = LinearRegression()
model_lr.fit(X_train_lr, y_train_lr)
print("Linear regression predictions: ", model_lr.predict(X_test_lr)[0][0])
model_rf = RandomForestRegressor(n_estimators = 1000, max_depth = 1000, random_state = 42)
model_rf.fit(X_train_rf, y_train_rf)
print("Random forests regression predictions: ", model_rf.predict(X_test_rf)[0])
使用Python預測缺失值

 

我就到此為止,但我鼓勵你嘗試一下特征選擇和超參數調整,看看是否可以提高性能。此外,我鼓勵你擴展此數據進行插補模型,以填補“region_1”和“designation”等分類字段中的缺失值。在這里,你可以構建一個基于樹的分類模型,根據分類和數值特征來預測所列類別的缺失值。

結論

總而言之,在這篇文章中,我們討論了如何建立機器學習模型,我們可以用來填補數據中的缺失值。首先,我們建立了一個線性回歸模型,用以預測葡萄酒的價格。然后,我們建立了一個隨機森林模型,用“points”和其他分類變量來預測葡萄酒價格。我們發現,隨機森林模型顯著優于基于線性回歸的數據插補模型。本文中的代碼可以在GitHub上找到。謝謝你的閱讀!

Github鏈接:https://github.com/spierre91/medium_code/blob/master/machine_learning/predict_missing_data.py

分享到:
標簽:Python
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定