您好,登錄后才能下訂單哦!
這篇文章主要介紹“怎么使用Python和Jupyter Notebook構(gòu)建預測模型”,在日常操作中,相信很多人在怎么使用Python和Jupyter Notebook構(gòu)建預測模型問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”怎么使用Python和Jupyter Notebook構(gòu)建預測模型”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
我在這個實驗中使用的數(shù)據(jù)是來自Kaggle的酒店預訂需求數(shù)據(jù)集
在本文中,我將只向你展示建模階段,僅使用Logistic回歸模型,但是你可以訪問完整的文檔,包括在Github上進行的數(shù)據(jù)清理、預處理和探索性數(shù)據(jù)分析。
導入庫
import numpy as np import pandas as pd import matplotlib.pyplot as plt import seaborn as sns from sklearn.model_selection import train_test_split from sklearn.linear_model import LogisticRegression from sklearn.metrics import confusion_matrix from sklearn.metrics import classification_report import warnings warnings.filterwarnings("ignore")
加載數(shù)據(jù)集
df = pd.read_csv('hotel_bookings.csv') df = df.iloc[0:2999] df.head()
下面是數(shù)據(jù)集的外觀。
它有32列,它的完整版本是:
['hotel', 'is_canceled', 'lead_time', 'arrival_date_year', 'arrival_date_month', 'arrival_date_week_number', 'arrival_date_day_of_month', 'stays_in_weekend_nights', 'stays_in_week_nights', 'adults', 'children', 'babies', 'meal', 'country', 'market_segment', 'distribution_channel', 'is_repeated_guest', 'previous_cancellations', 'previous_bookings_not_canceled', 'reserved_room_type', 'assigned_room_type', 'booking_changes', 'deposit_type', 'agent', 'company', 'days_in_waiting_list', 'customer_type', 'adr', 'required_car_parking_spaces', 'total_of_special_requests', 'reservation_status', 'reservation_status_date']
根據(jù)我在Notebook上運行的信息,數(shù)據(jù)集中的NaN值可以在“country”、“agent”和“company”三列中找到
基于“l(fā)ead_time”特征,我將“country”中的NaN值替換為PRT(葡萄牙),因為PRT是最常見的
我試圖根據(jù)lead_time, arrival_date_month, 和arrival_date_week_number替換“agent”特征上的NaN值,但大多數(shù)都是“240”作為最常見的代理。
在我閱讀了在互聯(lián)網(wǎng)上可以找到的數(shù)據(jù)集的描述和解釋后,作者將“agent”特征描述為“預訂的旅行社ID”。因此,那些在數(shù)據(jù)集中擁有“agent”的人是唯一通過旅行社訂購的人,而那些沒有“agent”或是Nan的人,是那些沒有通過旅行社訂購的人。因此,我認為最好是用0來填充NaN值,而不是用常見的代理來填充它們,這樣會使數(shù)據(jù)集與原始數(shù)據(jù)集有所不同。
最后但并非最不重要的是,我選擇放棄整個“company”特征,因為該特性中的NaN約占數(shù)據(jù)的96%。如果我決定修改數(shù)據(jù),它可能會對數(shù)據(jù)產(chǎn)生巨大的影響,并可能會影響整個數(shù)據(jù)
拆分數(shù)據(jù)集
df_new = df.copy()[['required_car_parking_spaces','lead_time','booking_changes','adr','adults', 'is_canceled']] df_new.head()
x = df_new.drop(['is_canceled'], axis=1) y = df_new['is_canceled']
我試著根據(jù)與目標(is_Cancelled)最顯著相關(guān)的前5個特征對數(shù)據(jù)集進行拆分,它們是required_car_parking_spaces’, ’lead_time’, ’booking_changes’, ’adr’, ’adults,’ 和‘is_canceled.’
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.20, shuffle=False)
訓練和測試分成80%和20%。
擬合模型
model_LogReg_Asli是在使用超參數(shù)調(diào)優(yōu)之前使用Logistic回歸的原始模型,下面是模型預測。
模型性能
如上所述,Logistic回歸模型的準確率約為69.3%。
模型參數(shù)
Randomized Search CV的Logistic回歸分析
model_LR_RS是采用Logistic回歸和超參數(shù)調(diào)整(隨機)的模型。
如上圖所示,帶有Randomized Search CV的Logistic回歸模型的結(jié)果與沒有隨機搜索的結(jié)果完全相同,為69.3%。
基于網(wǎng)格搜索CV的Logistic回歸
model_LR2_GS是采用Logistic回歸和超參數(shù)調(diào)整(網(wǎng)格搜索)的模型。
上圖顯示,使用網(wǎng)格搜索CV的Logistic回歸模型具有相同的準確率,為69.3%。
模型評估
混淆矩陣
TN為真反例,F(xiàn)N為假反例,F(xiàn)P為假正例,TP為真正例,0不被取消,1被取消。下面是模型的分類報告。
到此,關(guān)于“怎么使用Python和Jupyter Notebook構(gòu)建預測模型”的學習就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續(xù)學習更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。