毫無疑問,機(jī)器學(xué)習(xí)是當(dāng)前大數(shù)據(jù)分析中最熱門的話題。這也是一些最令人興奮的技術(shù)領(lǐng)域的基本概念,例如自動(dòng)駕駛汽車和預(yù)測分析。百度上的機(jī)器學(xué)習(xí)搜索在2019年4月創(chuàng)歷史新高,自此以來興趣一直沒有下降。
但是實(shí)際上學(xué)習(xí)機(jī)器學(xué)習(xí)可能很困難。您要么使用行為類似于“黑匣子”的預(yù)構(gòu)建包,要么在其中傳遞數(shù)據(jù),另一端則產(chǎn)生魔力,或者您必須處理高級數(shù)學(xué)和線性代數(shù)。每種方法都使學(xué)習(xí)機(jī)器學(xué)習(xí)充滿挑戰(zhàn)和威脅。
用Python搭建機(jī)器學(xué)習(xí)模型預(yù)測房租價(jià)格旨在向您介紹機(jī)器學(xué)習(xí)的基本概念。在繼續(xù)學(xué)習(xí)時(shí),您將從頭開始構(gòu)建第一個(gè)模型以進(jìn)行預(yù)測,同時(shí)準(zhǔn)確地了解模型的工作原理。
(用Python搭建機(jī)器學(xué)習(xí)模型預(yù)測房租價(jià)格基于我們的機(jī)器學(xué)習(xí)基礎(chǔ)知識課程,它是我們的大數(shù)據(jù)分析學(xué)習(xí)路徑的一部分。該課程涉及更多細(xì)節(jié),使您可以交互地編寫代碼,以便邊做邊學(xué)。對掌握機(jī)器學(xué)習(xí)非常感興趣,我們建議您選擇該課程以及我們的大數(shù)據(jù)分析家課程中的其他機(jī)器學(xué)習(xí)課程。)
什么是機(jī)器學(xué)習(xí)?
簡而言之,機(jī)器學(xué)習(xí)是構(gòu)建系統(tǒng)(稱為模型)的實(shí)踐,可以使用數(shù)據(jù)對其進(jìn)行訓(xùn)練,以找到可用于對新數(shù)據(jù)進(jìn)行預(yù)測的模式。
與許多其他編程不同,機(jī)器學(xué)習(xí)模型不是基于規(guī)則的系統(tǒng),在該系統(tǒng)中,使用一系列“如果/那么”語句來確定結(jié)果(例如,“如果學(xué)生錯(cuò)過了超過50%的課程,則自動(dòng)使他們失敗) ')。
取而代之的是,機(jī)器學(xué)習(xí)模型檢查具有定義結(jié)果的數(shù)據(jù)集中數(shù)據(jù)點(diǎn)之間的統(tǒng)計(jì)關(guān)系,然后將所學(xué)到的關(guān)于這些關(guān)系的知識應(yīng)用于分析和預(yù)測新數(shù)據(jù)集的結(jié)果。
機(jī)器學(xué)習(xí)的工作原理
為了更好地理解機(jī)器學(xué)習(xí)的基礎(chǔ),我們來看一個(gè)示例。假設(shè)我們要出售房屋,并且想確定合適的掛牌價(jià)格。我們可能會(huì)做的事情,以及房地產(chǎn)經(jīng)紀(jì)人實(shí)際上會(huì)做的事情,就是看一看我們地區(qū)已經(jīng)出售的可比房屋。用機(jī)器學(xué)習(xí)的術(shù)語來說,我們看的每座房子都稱為觀察。
對于每座房屋,我們將考慮以下因素,例如房屋的大小,房屋的臥室和浴室的數(shù)量,距雜貨店等便利設(shè)施的距離等。在機(jī)器學(xué)習(xí)術(shù)語中,每個(gè)屬性都稱為特點(diǎn)。
一旦找到了許多類似的房屋,我們便可以查看它們的售價(jià),對這些價(jià)格進(jìn)行平均,然后得出關(guān)于我們房屋價(jià)值的相當(dāng)合理的預(yù)測。
在此示例中,我們建立的“模型”是根據(jù)我們所在地區(qū)其他房屋的數(shù)據(jù)(觀測值)進(jìn)行訓(xùn)練的,然后用于對房屋價(jià)值進(jìn)行預(yù)測。我們預(yù)測的值,即價(jià)格,被稱為目標(biāo)變量。
當(dāng)然,這個(gè)例子并不是真正的“機(jī)器學(xué)習(xí)”,因?yàn)槲覀兏鶕?jù)自己房屋的特點(diǎn)挑選了“觀測”房屋進(jìn)行研究。試圖大規(guī)模地進(jìn)行這種事情(例如,基于龐大的房地產(chǎn)數(shù)據(jù)集預(yù)測城市中任何房屋的價(jià)格)對人類來說將是非常困難的。觀察和特征越多,用手進(jìn)行這樣的分析就越困難,并且越容易錯(cuò)過數(shù)據(jù)中的重要但非顯而易見的模式。
這就是機(jī)器學(xué)習(xí)是在一個(gè)真正的機(jī)器學(xué)習(xí)模型可以做的非常相似于我們的小房子預(yù)測模型的東西很多規(guī)模較大的:
1)檢查過去房屋銷售的大數(shù)據(jù)集(觀察)
2)查找房屋的特征(特征)與其價(jià)格(目標(biāo)變量)之間的模式和統(tǒng)計(jì)關(guān)系,包括查看數(shù)據(jù)的人可能看不到的模式
3)使用這些統(tǒng)計(jì)關(guān)系和模式來預(yù)測任何新房的價(jià)格,我們以此為基礎(chǔ)提供數(shù)據(jù)。
我們將在用Python搭建機(jī)器學(xué)習(xí)模型預(yù)測房租價(jià)格中構(gòu)建的模型與上面概述的模型相似。我們將使用Python構(gòu)建一個(gè)簡單的模型,以提出租房平臺(tái)公寓的租金價(jià)格建議。
(本文假定您熟悉Python的pandas庫-如果您需要學(xué)習(xí)pandas,我們建議您將pandas教程分為兩部分,或者將Python和Pandas互動(dòng)式學(xué)習(xí)。)
預(yù)測租房平臺(tái)的租金價(jià)格
對于沒有經(jīng)驗(yàn)的人,租房平臺(tái)是一個(gè)短期房屋和公寓出租的互聯(lián)網(wǎng)市場。例如,它使您可以在外出時(shí)將房屋出租一周,或?qū)溆门P室出租給旅行者。該公司本身已從2008年成立時(shí)迅速成長為估值接近400億美元的公司,目前的市值超過全球任何一家連鎖酒店。
租房平臺(tái)房東面臨的挑戰(zhàn)之一是確定最佳的每晚租金價(jià)格。在許多地區(qū),潛在的租戶都會(huì)看到很多房源,并且可以按價(jià)格,臥室數(shù)量,房間類型等條件進(jìn)行過濾。由于租房平臺(tái)是一個(gè)市場,房東每晚收取的費(fèi)用與市場的動(dòng)態(tài)密切相關(guān)。這是租房平臺(tái)上搜索體驗(yàn)的屏幕截圖:
租房平臺(tái)搜索結(jié)果
假設(shè)我們想在租房平臺(tái)上租一個(gè)房間。作為房東,如果我們試圖以高于市場價(jià)格的價(jià)格收費(fèi),那么租房者將選擇更多負(fù)擔(dān)得起的替代品,而我們不會(huì)賺錢。另一方面,如果我們將每晚租金設(shè)置得太低,我們將錯(cuò)過潛在的收入。
我們?nèi)绾尾拍苓_(dá)到中間的“最佳位置”?我們可以使用的一種策略是:
1)找到一些與我們相似的列表,
2)平均與我們最相似的商品的標(biāo)價(jià),
3)并將我們的掛牌價(jià)設(shè)為此計(jì)算出的平均價(jià)格。
但是,一遍又一遍地手動(dòng)執(zhí)行操作將非常耗時(shí),而且我們是大數(shù)據(jù)分析家!我們將使用稱為k-nearest neighbors的技術(shù)來構(gòu)建機(jī)器學(xué)習(xí)模型,以自動(dòng)執(zhí)行此過程,而不是手動(dòng)進(jìn)行操作。
我們將從查看將要使用的數(shù)據(jù)集開始。
我們的租房平臺(tái)數(shù)據(jù)
租房平臺(tái)不會(huì)在其市場上發(fā)布任何列表上的數(shù)據(jù),而是一個(gè)名為Inside 租房平臺(tái)的獨(dú)立組織從網(wǎng)站上許多主要城市的列表樣本中提取數(shù)據(jù)。在本文中,我們將使用2015年10月3日以來在美國首都華盛頓特區(qū)上市的數(shù)據(jù)集。這是該數(shù)據(jù)集的直接鏈接。
數(shù)據(jù)集中的每一行都是一個(gè)特定的清單,可供在華盛頓特區(qū)的租房平臺(tái)上租用。用機(jī)器學(xué)習(xí)的術(shù)語來說,每一行都是一個(gè)觀察。這些列描述了每個(gè)列表的不同特征(以機(jī)器學(xué)習(xí)術(shù)語為特征)。
為了減少使用數(shù)據(jù)集的麻煩,我們刪除了原始數(shù)據(jù)集中的許多列,并將文件重命名為dc_租房平臺(tái).csv。
這是我們將要使用的一些更重要的列(功能),因?yàn)檫@些都是租房者可以用來評估他們將選擇哪個(gè)清單的特征:
1)accommodates:租金可容納的客人人數(shù)
2)bedrooms:租金中包含的臥室數(shù)量
3)bathrooms:租金中包含的浴室數(shù)量
4)beds:租金中包含的床位數(shù)
5)price:每晚租金
6)minimum_nights:客人可以租用的最少住宿天數(shù)
7)maximum_nights:客人可以租用的最大住宿天數(shù)
8)number_of_reviews:先前訪客留下的評論數(shù)
我們將從將清理后的數(shù)據(jù)集讀入pandas開始,打印其大小并查看前幾行。(如果您不確定如何自己從原始數(shù)據(jù)集中刪除多余的列,請查看我們的一些pandas和數(shù)據(jù)清理課程)。
這看起來不錯(cuò)!現(xiàn)在,讓我們繼續(xù)我們將用于機(jī)器學(xué)習(xí)模型的算法。
K近鄰算法
K最近鄰(KNN)算法的工作方式與我們之前概述的三步過程類似,可以將我們的列表與類似列表進(jìn)行比較,并取平均價(jià)格。讓我們更詳細(xì)地看一下:
首先,我們選擇k要比較的相似列表的數(shù)量。
其次,我們需要使用相似度指標(biāo)來計(jì)算每個(gè)列表與我們的相似度。
第三,我們使用相似性指標(biāo)對每個(gè)列表進(jìn)行排名,然后選擇第一個(gè)k列表。
最后,我們計(jì)算k相似商品的平均價(jià)格,并將其用作我們的標(biāo)價(jià)。
盡管為簡單起見,上面的圖像每個(gè)觀察僅使用兩個(gè)功能(臥室和價(jià)格)與我們的清單進(jìn)行比較,但機(jī)器學(xué)習(xí)的好處在于,通過為每個(gè)觀察評估更多的功能,我們可以進(jìn)行更復(fù)雜的比較。
讓我們開始通過定義我們將要使用的相似性度量來構(gòu)建真實(shí)模型。然后,我們將實(shí)現(xiàn)k最近鄰居算法,并使用該算法為新列表建議價(jià)格。出于用Python搭建機(jī)器學(xué)習(xí)模型預(yù)測房租價(jià)格的目的,我們將使用的固定k值5,但是一旦您熟悉算法的工作流程,就可以嘗試使用該值來查看使用較低或較高的k值可獲得更好的結(jié)果。
歐氏距離
嘗試預(yù)測價(jià)格等連續(xù)值時(shí),使用的主要相似性度量是歐幾里德距離。這是歐幾里得距離的一般公式:
哪里 q1個(gè) 至 qñ 代表一個(gè)觀測值的特征值 p1個(gè) 至 pñ 代表其他觀察的特征值。
如果您的頭部剛剛爆炸,請放心!我們將把它分解成小塊。我們將從...開始
建立基本的KNN模型
讓我們首先分解一下內(nèi)容,然后僅查看數(shù)據(jù)集中的一列。這是僅一個(gè)功能的公式:
用語言表達(dá),我們想要找到觀測值與我們要為所使用功能預(yù)測的數(shù)據(jù)點(diǎn)之間的差的絕對值。
就目前的目的而言,假設(shè)我們要租用的居住空間可容納三個(gè)人。
我們將首先僅使用accommodates要素來計(jì)算數(shù)據(jù)集中第一個(gè)居住空間與我們自己之間的距離。我們可以使用NumPy函數(shù)np.abs()獲取絕對值。
歐幾里得距離的最小可能值為零,這意味著我們正在比較的觀測值與我們的觀測值相同,因此我們在這里得到的結(jié)果是有意義的。但是,孤立地講,該值的意義并不大,除非我們知道它與其他值的比較方式。讓我們?yōu)閿?shù)據(jù)集中的每個(gè)觀測值計(jì)算歐幾里得距離,并查看使用的值范圍pd.value_counts()。
有461條距離為的列表,0因此可容納與我們列表相同的人數(shù)。這些列表可能是一個(gè)不錯(cuò)的起點(diǎn)。
如果僅使用距離為的前五個(gè)值0,則我們的預(yù)測將偏向于數(shù)據(jù)集的現(xiàn)有排序。相反,我們將隨機(jī)化觀測值的順序,然后選擇距離為的前五行0。我們將用于DataFrame.sample()隨機(jī)化行。此方法通常用于選擇DataFrame的隨機(jī)部分,但是我們將告訴它隨機(jī)選擇100%,這將為我們隨機(jī)地洗排行。
我們還將使用random_state僅給我們可重現(xiàn)的隨機(jī)順序的參數(shù),以便任何人都可以遵循并獲得完全相同的結(jié)果。
在我們?nèi)∑骄鶅r(jià)格之前,您會(huì)注意到我們的價(jià)格列具有object類型,這是因?yàn)閮r(jià)格具有美元符號和逗號(我們上面的示例未顯示逗號,因?yàn)樗兄刀驾^小超過$ 1000)。
float在計(jì)算前五個(gè)值的平均值之前,讓我們通過刪除這些字符并將其轉(zhuǎn)換為類型來清理此列。我們將使用pandas Series.str.replace()刪除流浪字符并傳遞\$|,與$或匹配的正則表達(dá)式,。
現(xiàn)在,我們已經(jīng)做出了第一個(gè)預(yù)測-我們的KNN模型告訴我們,當(dāng)我們僅使用該accommodates功能時(shí),為三人房列表找到合適的價(jià)格,我們應(yīng)該以$ 88.00的價(jià)格列出我們的公寓。
這是一個(gè)好的開始!問題是,我們沒有任何方法可以知道此模型的準(zhǔn)確性,因此無法進(jìn)行優(yōu)化和改進(jìn)。遵循任何機(jī)器學(xué)習(xí)模型的預(yù)測而不評估其準(zhǔn)確性不是一個(gè)好主意!
評估我們的模型
測試模型質(zhì)量的一種簡單方法是:
a)將數(shù)據(jù)集分為2個(gè)分區(qū):
1)一個(gè)訓(xùn)練集:包含了大多數(shù)的行(75%)
2)甲測試集:包含行的其余少數(shù)(25%)
b)使用訓(xùn)練集中的行來預(yù)測price測試集中的行的值
c)將預(yù)測值與price測試集中的實(shí)際值進(jìn)行比較,以查看預(yù)測值的準(zhǔn)確性。
我們要按照這個(gè)方法和3,723行我們的數(shù)據(jù)集分為兩個(gè)部分:train_df和test_df在75%-25%分割。
我們還將刪除我們在創(chuàng)建第一個(gè)模型時(shí)先前添加的列。
為了使我們自己更輕松地查看指標(biāo),我們會(huì)將之前制作的模型合并為一個(gè)函數(shù)。我們不必?fù)?dān)心對行進(jìn)行隨機(jī)化,因?yàn)樗鼈內(nèi)允禽^早前隨機(jī)化的。
現(xiàn)在,我們可以使用此函數(shù)使用該accommodates列來預(yù)測測試數(shù)據(jù)集的值。
使用RMSE評估我們的模型
對于許多預(yù)測任務(wù),我們希望對遠(yuǎn)離實(shí)際值的預(yù)測值的懲罰要遠(yuǎn)大于接近實(shí)際值的預(yù)測值。
為此,我們可以取平方誤差值的平均值,稱為均方根誤差(RMSE)。下面是RMSE下式:,其中表示的數(shù)量測試集中的行。起初,這個(gè)公式可能看起來很讓人不知所措,但我們要做的只是:
a)取每個(gè)預(yù)測值與實(shí)際值(或誤差)之差,
b)平方這個(gè)差(平方),
c)取所有平方差的平均值(均值),然后
d)取均值的平方根(根)。
因此,從下往上讀?。壕礁`差。讓我們?yōu)闇y試集上的預(yù)測計(jì)算RMSE值。
RMSE約為213美元。關(guān)于RMSE的一件方便的事是,因?yàn)槲覀兿绕椒饺缓笕∑椒礁訰MSE的單位與我們預(yù)測的值相同,這使我們易于理解錯(cuò)誤的范圍。
在這種情況下,規(guī)模很大-我們離準(zhǔn)確的預(yù)測還差得遠(yuǎn)。
比較不同型號
有了一個(gè)誤差指標(biāo),我們可以用來查看模型的準(zhǔn)確性,讓我們使用不同的列創(chuàng)建一些預(yù)測,并研究誤差的變化情況。
我們可以看到,我們訓(xùn)練的四個(gè)模型中最好的模型是使用該accomodates列的模型。
但是,相對于數(shù)據(jù)集中列表的價(jià)格范圍,我們得到的錯(cuò)誤率非常高。這類錯(cuò)誤率的預(yù)測不會(huì)很有幫助。
值得慶幸的是,我們可以做些什么!到目前為止,我們僅使用一種功能(稱為單變量模型)來訓(xùn)練模型。為了獲得更高的準(zhǔn)確性,我們可以讓它同時(shí)評估多個(gè)特征,這被稱為多元模型。
我們將閱讀此數(shù)據(jù)集的完整版本,以便我們可以專注于評估模型。在我們清理的數(shù)據(jù)集中:
a)由于我們無法計(jì)算具有非數(shù)字字符的值的歐幾里得距離,因此所有列均已轉(zhuǎn)換為數(shù)字值。
b)為簡單起見,非數(shù)字列已被刪除。
c)缺少值的所有列表均已刪除。
d)我們對列進(jìn)行了歸一化,這將為我們提供更準(zhǔn)確的結(jié)果。
如果您想了解有關(guān)數(shù)據(jù)清理和為機(jī)器學(xué)習(xí)準(zhǔn)備數(shù)據(jù)的更多信息,可以閱讀出色的文章為機(jī)器學(xué)習(xí)準(zhǔn)備和清理數(shù)據(jù)。
讓我們閱讀這個(gè)干凈的版本,稱為dc_租房平臺(tái).normalized.csv,并預(yù)覽前幾行:
我們將從建立使用accommodates和bathrooms功能的模型開始。對于這種情況,我們的歐幾里得方程應(yīng)為:
為了找到兩個(gè)生活空間之間的距離,我們需要計(jì)算兩個(gè)accommodates值之間的平方差,兩個(gè)bathrooms值之間的平方差,將它們相加,然后取所得總和的平方根。
這是前兩行之間的歐式距離normalized_listings:
到目前為止,我們已經(jīng)通過自己編寫方程的邏輯來自己計(jì)算歐幾里得距離。我們可以改用from中的distance.euclidean()函數(shù)scipy.spatial,該函數(shù)將兩個(gè)向量作為參數(shù)并計(jì)算它們之間的歐式距離。該euclidean()函數(shù)期望:
1)這兩個(gè)向量都將使用類似列表的對象(Python列表,NumPy數(shù)組或pandas系列)來表示
2)兩個(gè)向量都必須是一維的并且具有相同數(shù)量的元素
讓我們使用該euclidean()函數(shù)來計(jì)算要練習(xí)的數(shù)據(jù)集中第一行和第五行之間的歐幾里得距離。
創(chuàng)建多元KNN模型
我們可以擴(kuò)展先前的功能以使用兩個(gè)功能以及整個(gè)數(shù)據(jù)集。而不是distance.euclidean(),我們將使用distance.cdist(),因?yàn)樗试S我們一次傳遞多行。
(該cdist()方法可以使用多種方法來計(jì)算距離,但默認(rèn)為歐幾里得。)
您可以看到,使用兩項(xiàng)功能(而不只是)時(shí),我們的RMSE從212提高到122 accommodates。盡管它仍然不如我們希望的那樣準(zhǔn)確,但這是一個(gè)巨大的改進(jìn)。
scikit-learn簡介
我們一直在從頭開始編寫函數(shù)來訓(xùn)練我們的k近鄰模型。這有助于了解機(jī)制的工作原理,但是現(xiàn)在我們了解了基礎(chǔ)知識,便可以使用Python的scikit-learn庫更快,更高效地工作。
Scikit-learn是Python中最受歡迎的機(jī)器學(xué)習(xí)庫。它具有適用于所有主要機(jī)器學(xué)習(xí)算法的內(nèi)置功能以及簡單,統(tǒng)一的工作流程。這兩個(gè)屬性使大數(shù)據(jù)分析家在新數(shù)據(jù)集上訓(xùn)練和測試不同的模型時(shí),工作效率令人難以置信。
scikit-learn工作流程包括四個(gè)主要步驟:
a)實(shí)例化您要使用的特定機(jī)器學(xué)習(xí)模型。
b)使模型適合訓(xùn)練數(shù)據(jù)。
c)使用模型進(jìn)行預(yù)測。
d)評估預(yù)測的準(zhǔn)確性。
scikit-learn中的每個(gè)模型都是作為單獨(dú)的類實(shí)現(xiàn)的,第一步是識別我們要為其創(chuàng)建實(shí)例的類。
任何可以幫助我們預(yù)測數(shù)值的模型(例如模型中的上市價(jià)格)都稱為回歸模型。機(jī)器學(xué)習(xí)模型的另一個(gè)主要類別稱為分類。當(dāng)我們嘗試從一組固定的標(biāo)簽(例如血型或性別)中預(yù)測標(biāo)簽時(shí),將使用分類模型。
在我們的例子中,我們想使用KNeighborsRegressor類。這個(gè)詞回歸從類名KNeighborsRegressor是指回歸模型類,我們剛才討論的,而“KNeighbors”來自k-最近鄰模型中,我們正在構(gòu)建。
Scikit-learn使用類似于Matplotlib的面向?qū)ο蟮臉邮?。我們需要在調(diào)用其他構(gòu)造函數(shù)之前實(shí)例化一個(gè)空模型。
如果參考文檔,默認(rèn)情況下我們會(huì)注意到:
1)n_neighbors:鄰居數(shù),設(shè)置為 5
2)algorithm:用于計(jì)算最近的鄰居,設(shè)置為 auto
3)p:設(shè)置為2,對應(yīng)于歐幾里得距離
讓我們將algorithm參數(shù)設(shè)置為,brute并將n_neighbors值保留為5,這與我們構(gòu)建的手動(dòng)實(shí)現(xiàn)相匹配。
擬合模型并做出預(yù)測
現(xiàn)在,我們可以使用fit方法使模型適合數(shù)據(jù)。對于所有模型,該fit方法均采用兩個(gè)必需參數(shù):
1)類似于矩陣的對象,其中包含我們要從訓(xùn)練集中使用的要素列。
2)包含正確目標(biāo)值的類似列表的對象。
“類矩陣對象”意味著該方法非常靈活,可以接受pandas DataFrame或NumPy 2D數(shù)組。這意味著我們可以從DataFrame中選擇要使用的列,并將其用作該fit方法的第一個(gè)參數(shù)。
對于第二個(gè)參數(shù),請回想一下,以下所有都是可接受的類似列表的對象:
1)一個(gè)NumPy數(shù)組
b)Python列表
c)pandas系列對象(例如列)
讓我們從DataFrame中選擇目標(biāo)列,并將其用作方法的第二個(gè)參數(shù)fit:
fit()調(diào)用該方法時(shí),scikit-learn將在KNearestNeighbors實(shí)例(knn)中存儲(chǔ)我們指定的訓(xùn)練數(shù)據(jù)。如果我們嘗試將包含缺失值或非數(shù)字值的數(shù)據(jù)傳遞到fit方法中,則scikit-learn將返回錯(cuò)誤。那是該庫的妙處之一–它包含許多類似的功能,以防止我們犯錯(cuò)誤。
現(xiàn)在,我們已經(jīng)指定了要用于預(yù)測的訓(xùn)練數(shù)據(jù),我們可以使用預(yù)測方法對測試集進(jìn)行預(yù)測。該predict方法只有一個(gè)必需的參數(shù):
類似于矩陣的對象,其中包含我們要進(jìn)行預(yù)測的數(shù)據(jù)集中的特征列
我們在培訓(xùn)和測試期間使用的功能列數(shù)需要匹配或scikit-learn會(huì)返回錯(cuò)誤。
該predict()方法返回一個(gè)NumPy數(shù)組,其中包含price測試集的預(yù)測值。
現(xiàn)在,我們擁有練習(xí)整個(gè)scikit-learn工作流程所需的一切:
當(dāng)然,僅僅因?yàn)槲覀兪褂胹cikit-learn而不是手動(dòng)編寫函數(shù),并不意味著我們可以跳過評估步驟,以了解模型預(yù)測的實(shí)際準(zhǔn)確性!
使用Scikit-Learn計(jì)算MSE
到目前為止,我們一直使用NumPy和SciPy函數(shù)來協(xié)助我們手動(dòng)計(jì)算RMSE值?;蛘?,我們可以改用sklearn.metrics.mean_squared_error function()。
該mean_squared_error()函數(shù)接受兩個(gè)輸入:
1)類似于列表的對象,代表測試集中的真實(shí)值。
2)第二個(gè)類似列表的對象,代表由模型生成的預(yù)測值。
從語法的角度來看,這不僅簡單得多,而且由于scikit-learn已針對速度進(jìn)行了大幅優(yōu)化,因此運(yùn)行模型所需的時(shí)間更少。
請注意,我們的RMSE與手動(dòng)實(shí)現(xiàn)的算法略有不同-這可能是由于隨機(jī)差異以及我們的“手動(dòng)” KNN算法與scikit-learn版本之間在實(shí)現(xiàn)上的細(xì)微差異。
請注意,對scikit-learn庫本身的更改也會(huì)在一定程度上影響這些值。如果您按照用Python搭建機(jī)器學(xué)習(xí)模型預(yù)測房租價(jià)格進(jìn)行操作,但結(jié)果略有不同,則可能是因?yàn)槟褂玫氖莝cikit-learn的較新版本。
使用更多功能
scikit-learn最好的事情之一是它使我們可以更快地進(jìn)行迭代。讓我們通過創(chuàng)建一個(gè)使用四個(gè)特征而不是兩個(gè)特征的模型來進(jìn)行嘗試,看看是否可以改善我們的結(jié)果。
在這種情況下,我們的錯(cuò)誤略有下降。但是,添加功能時(shí)可能并不總是這樣做。這是要意識到的重要事項(xiàng):添加更多功能并不一定會(huì)產(chǎn)生更準(zhǔn)確的模型。
這是因?yàn)樘砑硬皇悄繕?biāo)變量的準(zhǔn)確預(yù)測指標(biāo)的功能會(huì)在模型中添加“噪聲”。
摘要
讓我們看看我們學(xué)到了什么:
我們了解了什么是機(jī)器學(xué)習(xí),并通過了一個(gè)非?;镜氖謩?dòng)“模型”來預(yù)測房屋的銷售價(jià)格。
我們了解了k最近鄰居算法,并從頭開始在Python中建立了一個(gè)單變量模型(僅一個(gè)功能),并用其進(jìn)行了預(yù)測。
我們了解到,RMSE可用于計(jì)算模型的誤差,然后可用于迭代和嘗試改善我們的預(yù)測。
然后,我們從頭開始創(chuàng)建了一個(gè)多變量(多個(gè)功能)模型,并將其用于更好的預(yù)測。
最后,我們了解了scikit-learn庫,并使用KNeighborsRegressor該類進(jìn)行了預(yù)測。
下一步
如果您想了解更多信息,那么用Python搭建機(jī)器學(xué)習(xí)模型預(yù)測房租價(jià)格基于我們的AAA教育機(jī)器學(xué)習(xí)基礎(chǔ)課程,這是我們的大數(shù)據(jù)分析學(xué)習(xí)路徑的一部分。用Python搭建機(jī)器學(xué)習(xí)模型預(yù)測房租價(jià)格將詳細(xì)介紹并改進(jìn)本文中構(gòu)建的模型,同時(shí)使您可以繼續(xù)進(jìn)行,在瀏覽器中編寫代碼,并通過我們的答案檢查系統(tǒng)對代碼進(jìn)行每一步檢查,以確保您正確執(zhí)行所有操作。
如果您想自己繼續(xù)研究此模型,可以采取以下幾項(xiàng)措施來提高準(zhǔn)確性:
a)嘗試用不同的值代替k。
b)返回原始數(shù)據(jù)集,并將我們刪除的一些列轉(zhuǎn)換為數(shù)字(我們的“機(jī)器學(xué)習(xí)的準(zhǔn)備和清潔數(shù)據(jù)”一文將在這里為您提供幫助),并嘗試添加不同的功能組合。
c)嘗試一些功能工程,在其中您可以基于現(xiàn)有數(shù)據(jù)創(chuàng)建新列:我們的Kaggle入門:房價(jià)競爭一文提供了一個(gè)簡單的示例。
填寫下面表單即可預(yù)約申請免費(fèi)試聽!怕錢不夠?可先就業(yè)掙錢后再付學(xué)費(fèi)! 怕學(xué)不會(huì)?助教全程陪讀,隨時(shí)解惑!擔(dān)心就業(yè)?一地學(xué)習(xí),可推薦就業(yè)!
?2007-2022/ lb577.com 北京漫動(dòng)者數(shù)字科技有限公司 備案號: 京ICP備12034770號 監(jiān)督電話:010-53672995 郵箱:bjaaa@aaaedu.cc