国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

Google產品分析Zlatan Kremonic分享了參加Kaggle競賽的經驗

zhKF_jqr_AI ? 來源:未知 ? 作者:李倩 ? 2018-08-10 09:02 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

編者按:Google產品分析Zlatan Kremonic分享了參加Kaggle競賽的經驗。

問題

Kaggle房價競賽要求參賽者預測2006年至2010年美國愛荷華州埃姆斯市的房價。數據集中包含79個變量,包括許多房屋屬性。你可以在Kaggle網站上了解更多細節:https://www.kaggle.com/c/house-prices-advanced-regression-techniques

方法

由于我們的目標變量是連續值(售價),因此這是一個典型的回歸問題,讓人聯想起波斯頓房價數據集。評估標準為預測和實際售價的接近程度(預測值的對數與觀測到的售價的對數的均方根誤差)。

數據集中包括大量變量,其中許多是類別變量,因此特征選取是這一問題的關鍵部分。特征選取的兩種常用方法:

直接使用scikit-learn中的SelectKBest方法。

LASSO回歸。

我在分析中嘗試了這兩種方法,發現LASSO回歸的結果要好一些。

另外,我們將使用XGBoost,并在結果中融合LASSO的輸出,以提升模型的精確度。我們的最終結果不錯,位于排行榜的前10%(撰寫本文時)。

探索性數據分析

因為變量很多,為了節約篇幅,我不會詳細演示所有探索性數據分析(我在文末列出了GitHub倉庫的鏈接,如果你對探索性數據分析的細節感興趣,可以查看其中的EDA.ipynb)。相反,我將直接給出我的主要觀察,這些觀察給特征工程提供了信息。

我們有大量的類別屬性,需要進行獨熱編碼。

一些數值列有null值,需要填充。

許多數值列的分布比較扭曲,需要處理。

如前所述,為了節約篇幅,這里僅僅給出導入庫、加載數據的代碼,不包括探索性數據分析部分的代碼。

import os

import pandas as pd

import numpy as np

from scipy.stats import skew

from sklearn.model_selection importGridSearchCV

from sklearn.linear_model importLasso

from sklearn.metrics import mean_squared_error

from xgboost.sklearn importXGBClassifier

import xgboost as xgb

import matplotlib.pyplot as plt

%matplotlib inline

train = pd.read_csv(os.path.join('data', 'train.csv'))

test = pd.read_csv(os.path.join('data', 'test.csv'))

y = train.iloc[:, -1]

train = train.iloc[:, 1:-1]

test = test.iloc[:, 1:]

submission = test.iloc[:, 0]

特征工程

首先,我們將MSSubClass變量(表示建筑分類編碼)從數值轉為字符串,因為這些編碼只是無序的類別。

def mssubclass(train, test, cols=['MSSubClass']):

for i in (train, test):

for z in cols:

i[z] = i[z].apply(lambda x: str(x))

return train, test

接著,我們將對所有數值特征取對數,包括因變量。由于數值特征包含很多零值,我們使用log1p,在取對數前先加一。

def log(train, test, y):

numeric_feats = train.dtypes[train.dtypes != "object"].index

for i in (train, test):

i[numeric_feats] = np.log1p(i[numeric_feats])

y = np.log1p(y)

return train, test, y

我們將用每列的均值填充null值:

def impute_mean(train, test):

for i in (train, test):

for s in [k for k in i.dtypes[i.dtypes != "object"].index if sum(pd.isnull(i[k])>0)]:

i[s] = i[s].fillna(i[s].mean())

return train, test

獨熱編碼時,同樣需要填充null值:

def dummies(train, test):

columns = [i for i in train.columns if type(train[i].iloc[1]) == str or type(train[i].iloc[1]) == float]

for column in columns:

train[column].fillna('NULL', inplace = True)

good_cols = [column+'_'+i for i in train[column].unique()[1:] if i in test[column].unique()]

train = pd.concat((train, pd.get_dummies(train[column], prefix = column)[good_cols]), axis = 1)

test = pd.concat((test, pd.get_dummies(test[column], prefix = column)[good_cols]), axis = 1)

del train[column]

del test[column]

return train, test

整個特征工程流程:

train, test = mssubclass(train, test)

train, test, y = log(train, test, y)

train, test = lotfrontage(train, test)

train, test = garageyrblt(train, test)

train, test = impute_mean(train, test)

train, test = dummies(train, test)

LASSO回歸

LASSO回歸同時起到了正則化和特征選取的作用,可以改善模型的預測效果。就我們的情況而言,LASSO回歸是完美的算法,因為它有助于降低特征數并緩解過擬合。

LASSO回歸中需要調節的超參數主要是正則化因子alpha。我們使用GridSearchCV(網格搜索交叉驗證)尋找alpha的最優值。

alpha_ridge = [1e-5, 1e-4, 1e-3, 1e-2, 1, 5, 10, 20]

coeffs = {}

for alpha in alpha_ridge:

r = Lasso(alpha=alpha, normalize=True, max_iter=1000000)

r = r.fit(train, y)

grid_search = GridSearchCV(Lasso(alpha=alpha, normalize=True), scoring='neg_mean_squared_error',

param_grid={'alpha': alpha_ridge}, cv=10, n_jobs=-1)

grid_search.fit(train, y)

最終我們得到alpha的最佳值0.0001。為了更直觀地理解alpha的影響,我們可以畫出所有alpha值的均方根誤差:

alpha = alpha_ridge

rmse = list(np.sqrt(-grid_search.cv_results_['mean_test_score']))

plt.figure(figsize=(6,5))

lasso_cv = pd.Series(rmse, index = alpha)

lasso_cv.plot(title = "Validation - LASSO", logx=True)

plt.xlabel("alpha")

plt.ylabel("rmse")

現在用模型擬合訓練數據:

lasso = Lasso(alpha=.0001, normalize=True, max_iter=1e6)

lasso = lasso.fit(train, y)

我們的模型有多少列?

coef = pd.Series(lasso.coef_, index = train.columns)

print("Lasso選中了" + str(sum(coef != 0)) + "個變量,并移除了其他" + str(sum(coef == 0)) + "個變量")

Lasso選中了103個變量,并移除了其他142個變量

此外,我們可以看到,根據我們的模型,房齡、面積、房屋狀況是最重要的變量。這很符合直覺——在創建模型時檢查模型是否符合常理總是不錯的。

imp_coef = pd.concat([coef.sort_values().head(10),

coef.sort_values().tail(10)])

plt.rcParams['figure.figsize'] = (5.0, 5.0)

imp_coef.plot(kind = "barh")

plt.title("Coefficients in the Lasso Model")

用LASSO模型預測測試數據,我們得到的均方根誤差為0.1209,這已經足以在排行榜上取得前25%的名次了。

XGBoost模型

由于XGBoost在數據科學競賽中的強力表現,從2016年起,這一算法變得家喻戶曉了。這一算法的挑戰之一是處理大數據集時,調整超參數耗時很久。然而,因為我們的數據集包含不到1500項觀測,所以我覺得這是一個嘗試XGBoost的好機會。為了節約篇幅,我這里不會披露超參數調整的細節。我主要使用的方法是每次交叉驗證一到兩個參數,以免給我的機器太大的負擔,同時在調整會話的間隔重新計算n_estimators的最優值。

下面是我實現的最終模型。它的得分是0.12278,事實上這比LASSO模型要差。

regr = xgb.XGBRegressor(

colsample_bytree=0.3,

gamma=0.0,

learning_rate=0.01,

max_depth=4,

min_child_weight=1.5,

n_estimators=1668,

reg_alpha=1,

reg_lambda=0.6,

subsample=0.2,

seed=42,

silent=1)

regr.fit(train, y)

y_pred_xgb = regr.predict(test)

融合模型結果

最后我們需要組合兩個模型的結果。我對兩個模型的預測取了加權平均。最終的得分是0.11765,明顯比兩個模型單獨預測的結果要好。這確認了集成學習的首要原則,假定誤差率互不相關,集成的誤差率低于單個模型。

predictions = np.expm1(.6*lasso_pred + .4*y_pred_xgb)

之前在特征工程時使用了log1p,所以現在用expm1還原原數值。注意這里給LASSO更大的權重(0.6),并不是因為在測試數據上LASSO的表現優于XGBoost,而是因為在訓練數據上LASSO的表現優于XGBoost(因為建模的時候不能“偷看”測試數據)。

結語

這項競賽是一個練習標準回歸技術的好機會。我只進行了最少的特征工程就取得了前10%的排名。

除了上面的模型,我也嘗試了SelectKBest(搭配Pipeline和網格搜索),將列數縮減至138,并得到了0.13215的分數。然而,將其與其他模型融合時,效果不佳。后來我又試了隨機森林回歸,得分是0.14377,這不算差,但要在我們的集成中加入這個模型,這個分數顯然還不夠高。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Google
    +關注

    關注

    5

    文章

    1807

    瀏覽量

    60519
  • 數據集
    +關注

    關注

    4

    文章

    1236

    瀏覽量

    26190

原文標題:LASSO回歸與XGBoost:融合模型預測房價

文章出處:【微信號:jqr_AI,微信公眾號:論智】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    Kaggle機器學習/數據科學現狀調查

    Kaggle 是互聯網上最著名的數據科學競賽平臺之一,今年 3 月 8 日,這家機構被谷歌收購,6 月 6 日又宣布用戶數量超過了 100 萬人。
    的頭像 發表于 06-29 09:11 ?1.1w次閱讀
    <b class='flag-5'>Kaggle</b>機器學習/數據科學現狀調查

    參加“電子產品設計與制作”比賽,誰有經驗?求助。

    馬上就要參加“電子產品設計與制作”比賽,由于是第一屆,所以信息相對給的不足,而本人對于單片機還算精通,但是在網上看了下各省歷屆的賽況信息,好像不是很側重于單片機編程這一塊,所以比較擔心一點。因此想
    發表于 03-29 17:25

    Altera SOPC專題競賽-經驗總結

    Altera SOPC專題競賽-經驗總結Altera SOPC專題競賽-經驗總結.docx
    發表于 08-10 18:19

    我準備參加和泰杯單片機應用競賽,無經驗,請求高人注解

    我準備參加和泰杯單片機應用競賽,無經驗,請求高人注解。我該從哪些方面入手學習呢?
    發表于 12-10 15:07

    有指導學生參加技能競賽的教師嗎?

    有指導學生參加技能競賽的教師嗎?我這邊使用的是YL-236的機子。每天都訓練學生,自己本身就剛入門。所以想找找同伴。
    發表于 03-04 19:16

    全國大學生電子設計競賽

    參加全國大學生電子設計競賽請搞過的朋友發點有用的小模塊電路等等的資料,,,,,,,,為大賽做做準備或者給點經驗什么的。。。。
    發表于 07-09 13:29

    參加ti電子競賽

    第一次參加電子競賽,而且才大二,感覺學的知識太少了,參加電子競賽,主要知識是哪些方面的???
    發表于 06-29 09:00

    致正在參加電子競賽的你們

    時,舉行2015年全國大學生電子競賽,開賽前半小時網上發題。一、有一個正確的態度選擇參加電賽就應該盡力把它做好。我相信參加電賽的大部分人都是抱著對電子的好奇和熱愛,當然也有人說我就是
    發表于 07-28 19:33

    kaggle住宅價格預測

    kaggle房價實戰總結
    發表于 08-13 10:08

    kaggle泰坦尼克生存預測實施步驟

    數據分析-kaggle泰坦尼克號生存率分析(入門)個人總結
    發表于 09-05 15:36

    全國電子設計競賽_經驗之談

    全國電子設計競賽_經驗之談,有興趣的同學可以下載學習
    發表于 05-04 11:31 ?12次下載

    Kaggle沒有否認將被谷歌收購

    科技博客TechCrunch援引消息人士報道稱,谷歌正在收購Kaggle —— 一個舉辦數據科學和機器學習競賽的平臺。有關此次交易的詳細信息目前還未披露,但是考慮到谷歌本周在舊金山召開Cloud Next云技術大會,官方消息很可能會在明天公布。
    發表于 05-08 08:58 ?922次閱讀

    不用寫一行就帶就可以參加 Kaggle,這個真香!

    隨著 AI 技術的不斷發展與落地,有越來越多的平臺和工具可供大家使用,這些平臺針對不同領域、不同層次的開發者和學習者,只要你想學就有辦法。但問題是,對于剛入門,沒有多少經驗,對 TensorFlow、PyTorch 等工具和框架也不熟悉的人,能參加這樣的
    的頭像 發表于 07-18 10:59 ?3664次閱讀

    騰訊宣布其人工智能球隊獲首屆谷歌足球Kaggle競賽冠軍

    12月30日,騰訊宣布其人工智能球隊摘得了首屆谷歌足球Kaggle競賽冠軍。這是一場由Google Research與英超曼城俱樂部在Kaggle平臺上聯合舉辦的足球AI比賽,經過多輪
    的頭像 發表于 12-30 15:58 ?2304次閱讀

    如何從13個Kaggle比賽中挑選出的最好的Kaggle kernel

    。機器學習和圖像分類也不例外,工程師們可以通過參加Kaggle這樣的競賽來展示最佳實踐。在這篇文章中,我將給你很多資源來學習,聚焦于從13個Kaggle比賽中挑選出的最好的
    的頭像 發表于 06-27 09:26 ?2534次閱讀