一個(gè)完整的機(jī)器學(xué)習(xí)項(xiàng)目——代碼解析(三)

我又來(lái)解析代碼了,今天解析的部分是優(yōu)化測(cè)試集。
1、使用每個(gè)實(shí)例的ID來(lái)判定這個(gè)實(shí)例是否應(yīng)該放入測(cè)試集(假設(shè)每個(gè)實(shí)例都有唯一并且不變的ID)

import hashlib  #提供字符加密功能,將md5和sha模塊整合到了一起

def test_set_check(identifier,test_ratio,hash):
    return hash(np.int64(identifier)).digest()[-1] < 256 * test_ratio #求出ID哈希值最后一個(gè)字節(jié)是否滿足<256*ratio

def split_train_test_by_id(data, test_ratio, id_column, hash=hashlib.md5):
    ids = data[id_column] #按索引找出id
    in_test_set = ids.apply(lambda id_:test_set_check(id_, test_ratio, hash)) #對(duì)所有數(shù)據(jù)進(jìn)行劃分
    return data.loc[~in_test_set], data.loc[in_test_set]  #返回滿足條件的劃分為訓(xùn)練集和測(cè)試集

函數(shù)說(shuō)明:

hash.digest() 返回摘要,作為二進(jìn)制數(shù)據(jù)字符串值
np.int64()強(qiáng)轉(zhuǎn)為int64類型,和int不是一個(gè)類型。
apply()  將函數(shù)應(yīng)用到由各列或行形成的數(shù)組上
lambda匿名函數(shù)
loc通過(guò)標(biāo)簽索引行數(shù)據(jù)

2、使用行索引作為ID

housing_with_id = housing.reset_index()  #使用行索引做id
housing_with_id["id"] = housing["longitude"] * 1000 + housing["latitude"]   #使用經(jīng)度和緯度作為id
train_set, test_set = split_train_test_by_id(housing_with_id, 0.2, "id")    #進(jìn)行劃分

3、(另一種劃分方式)使用sk-learn中的函數(shù)劃分

from sklearn.model_selection import train_test_split
train_set, test_set = train_test_split(housing, test_size=0.2, random_state=42)  #進(jìn)行劃分

函數(shù)解釋:

train_set_split():帶有random_state參數(shù),可以設(shè)定隨機(jī)生成器種子;可以將種子傳遞給多個(gè)行數(shù)相同的數(shù)據(jù)集,可以在相同的索引上分割數(shù)據(jù)集

4、按照中位數(shù)分層劃分

housing["income_cat"] = np.ceil(housing["median_income"] / 1.5)  #中位數(shù)處以1.5向上取整
housing["income_cat"].where(housing["income_cat"] < 5, 5.0, inplace=True)  #將所有大于5的分類歸入到分類  5

from sklearn.model_selection import StratifiedShuffleSplit     

split = StratifiedShuffleSplit(n_splits=1, test_size=0.2, random_state=42) #對(duì)數(shù)據(jù)集進(jìn)行劃分,n_splits是將訓(xùn)練數(shù)據(jù)分成train/test對(duì)的組數(shù),test_size是所占比例,random_state控制是將樣本隨機(jī)打亂

for train_index, test_index in split.split(housing, housing["income_cat"]):#按照劃分器進(jìn)行劃分
    strat_train_set = housing.loc[train_index]
    strat_test_set = housing.loc[test_index]

print(housing["income_cat"].value_counts() / len(housing))#查看收入分配比例

for set in (strat_train_set, strat_test_set): #刪除income_cat屬性
    set.drop(["income_cat"], axis=1, inplace=True)

函數(shù)解釋:

StratifiedShuffleSplit() :對(duì)數(shù)據(jù)集進(jìn)行劃分,n_splits是將訓(xùn)練數(shù)據(jù)分成train/test對(duì)的組數(shù),test_size是所占比例,random_state控制是將樣本隨機(jī)打亂

今天到這里完成了訓(xùn)練集和測(cè)試集的劃分,下次就可以研究訓(xùn)練集了,加油!

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 通體的925銀配以天然珍珠,點(diǎn)綴閃亮愛(ài)心形狀的鋯石!開(kāi)口可調(diào)節(jié)大小,能讓你一眼就愛(ài)上的款。我們**家的每一款禮物都...
    喵小圈閱讀 4,395評(píng)論 0 0
  • 即便名存實(shí)亡的愛(ài)情,到了最后分手也還是會(huì)有些依依不舍,舍不掉的不是那段感情,舍不掉的是兩個(gè)人在一起的時(shí)光里的習(xí)慣…...
    葉星星閱讀 555評(píng)論 0 0
  • 參加工作17年,轉(zhuǎn)戰(zhàn)4個(gè)工作單位。不同單位的歷練,相遇不同的同事。這樣,也我不斷成長(zhǎng),更加成熟。開(kāi)始是初出茅廬、不...
    王櫟涵閱讀 1,439評(píng)論 27 16
  • 1.倉(cāng)鼠篇 家里的第一只倉(cāng)鼠是呂先生帶回來(lái)的,標(biāo)準(zhǔn)的健身達(dá)人,要么前爪抓著鐵籠做吊環(huán)運(yùn)動(dòng),來(lái)回晃蕩,露著個(gè)大肚皮,...
    爾東女閱讀 613評(píng)論 2 3

友情鏈接更多精彩內(nèi)容