機器學習實戰,天貓雙十一銷量與中國人壽保費預測,使用多項式回歸,梯度下降,EDA數據探索,彈性網絡等技術

前言

很多同學學機器學習時總感覺:“公式推導我會,代碼也能看懂,但自己從頭做項目就懵”。

這次我們選了兩個小數據集,降低復雜度,帶大家從頭開始進行分析,建模,預測,可視化等,體驗完整流程。把多項式回歸、梯度下降、正則化等技術真正用起來,而不是只做數學題。

所有代碼用Python實現(sklearn+pandas+matplotlib),可直接在Jupyter筆記本上跑通,適合練手。

數據集較舊,學習完后可尋找最新數據集等自行訓練模型。

關注我,學習技術,一起進步!

天貓雙十一銷量預測

天貓雙十一,從2009年開始舉辦,第一屆成交額僅僅0.5億,后面呈現了爆發式的增長,那么這些增長是否有規律呢?是怎么樣的規律,該如何分析呢?我們使用多項式回歸一探究竟!

數據可視化,歷年天貓雙十一銷量數據:

import numpy as np
from sklearn.linear_model import SGDRegressor
import matplotlib.pyplot as plt
plt.rcParams['font.size'] = 18
plt.figure(figsize=(9,6))# 創建數據,年份數據2009 ~ 2019
X = np.arange(2009,2020)
y = np.array([0.5,9.36,52,191,350,571,912,1207,1682,2135,2684])
plt.bar(X,y,width = 0.5,color = 'green')
plt.plot(X,y,color = 'red')
_ = plt.xticks(ticks = X)

有圖可知,在一定時間內,隨著經濟的發展,天貓雙十一銷量與年份的關系是多項式關系!假定,銷量和年份之間關系是三次冪關系:

import numpy as np
from sklearn.linear_model import SGDRegressor
import matplotlib.pyplot as plt
from sklearn.preprocessing import PolynomialFeatures
from sklearn.preprocessing import StandardScaler
plt.figure(figsize=(12,9))# 1、創建數據,年份數據2009 ~ 2019
X = np.arange(2009,2020)
y = np.array([0.5,9.36,52,191,350,571,912,1207,1682,2135,2684])# 2、年份數據,均值移除,防止某一個特征列數據天然的數值太大而影響結果
X = X - X.mean()
X = X.reshape(-1,1)# 3、構建多項式特征,3次冪
poly = PolynomialFeatures(degree=3)
X = poly.fit_transform(X)
s = StandardScaler()
X_norm = s.fit_transform(X)# 4、創建模型
model = SGDRegressor(penalty='l2',eta0 = 0.5,max_iter = 5000)
model.fit(X_norm,y)# 5、數據預測
X_test = np.linspace(-5,6,100).reshape(-1,1)
X_test = poly.transform(X_test)
X_test_norm = s.transform(X_test)
y_test = model.predict(X_test_norm)# 6、數據可視化
plt.plot(X_test[:,1],y_test,color = 'green')
plt.bar(X[:,1],y)
plt.bar(6,y_test[-1],color = 'red')
plt.ylim(0,4096)
plt.text(6,y_test[-1] + 100,round(y_test[-1],1),ha = 'center')
_ = plt.xticks(np.arange(-5,7),np.arange(2009,2021))

結論:

  • 數據預處理,均值移除。如果特征基準值和分散度不同在某些算法(例如回歸算法,KNN等)上可能會大大影響了模型的預測能力。通過均值移除,大大增強數據的離散化程度。
  • 多項式升維,需要對數據進行Z-score歸一化處理,效果更佳出色
  • SGD隨機梯度下降需要調整參數,以使模型適應多項式數據
  • 從2020年開始,天貓雙十一統計的成交額改變了規則為11.1日~11.11日的成交數據(之前的數據為雙十一當天的數據),2020年成交額為4980億元
  • 可以,經濟發展有其客觀規律,前11年高速發展(曲線基本可以反應銷售規律),到2020年是一個轉折點。

中國人壽保費預測

1、數據加載與介紹

import numpy as np
import pandas as pd
data = pd.read_excel('./中國人壽.xlsx')
print(data.shape)
data.head()

注意可能需要安裝庫:openpyxl

pip install openpyxl

數據介紹:

  • 共計1338條保險數據,每條數據7個屬性
  • 最后一列charges是保費
  • 前面6列是特征,分別為:年齡、性別、體重指數、小孩數量、是否抽煙、所在地區

2、EDA數據探索

EDA(Exploratory Data Analysis),即探索性數據分析,是數據分析中的一個重要環節,旨在對數據進行初步的探索和分析,以發現數據的內在結構、特征、關系以及潛在的問題,為后續的數據分析和建模提供基礎。

通過 EDA,可以幫助數據分析師和機器學習工程師更好地理解數據,發現數據中的問題和規律,為制定合適的數據分析策略、選擇合適的模型以及進行有效的特征工程提供依據,從而提高數據分析和建模的準確性和可靠性。

import seaborn as sns
import pandas as pd
import matplotlib.pyplot as plt# 解決中文顯示問題
plt.rcParams['font.sans-serif'] = ['SimHei']  # 使用黑體字體
plt.rcParams['axes.unicode_minus'] = False  # 解決負號顯示問題# 定義一個函數來繪制不同特征對保費的影響
def plot_kde_by_feature(data, feature, ax):# 將數據轉換為長格式melted_data = pd.melt(data, id_vars=['charges'], value_vars=[feature])# 繪制核密度估計圖sns.kdeplot(data=melted_data, x='charges', fill=True, hue='value', ax=ax)ax.set_title(f'{feature}對保費的影響')# 創建一個 2x2 的子圖布局
fig, axes = plt.subplots(2, 2, figsize=(12, 10))# 性別對保費影響
plot_kde_by_feature(data, 'sex', axes[0, 0])# 地區對保費影響
plot_kde_by_feature(data, 'region', axes[0, 1])# 吸煙對保費影響
plot_kde_by_feature(data, 'smoker', axes[1, 0])# 孩子數量對保費影響
plot_kde_by_feature(data, 'children', axes[1, 1])# 調整子圖之間的間距
plt.tight_layout()
plt.show()

總結:

  • 不同性別對保費影響不大,不同性別的保費的概率分布曲線基本重合,因此這個特征無足輕重,可以刪除
  • 地區同理
  • 吸煙與否對保費的概率分布曲線差別很大,整體來說不吸煙更加健康,那么保費就低,這個特征很重要
  • 家庭孩子數量對保費有一定影響

3、特征工程

特征工程是指從原始數據中提取、轉換和選擇特征,以提高機器學習模型性能的過程。

它是數據科學和機器學習領域中至關重要的一個環節,直接影響模型的效果和效率。

特征工程的目的是為了讓數據更好地表達問題的本質,使模型能夠更準確地學習到數據中的模式和規律,從而提高模型的性能和泛化能力。

一個好的特征工程可以顯著提升模型的效果,甚至比選擇更復雜的模型更有效。

data = data.drop(['region', 'sex'], axis=1)
data.head() # 刪除不重要特征# 體重指數,離散化轉換,體重兩種情況:標準、肥胖
def convert(df,bmi):df['bmi'] = 'fat' if df['bmi'] >= bmi else 'standard'return df
data = data.apply(convert, axis = 1, args=(30,))
data.head()# 特征提取,離散型數據轉換為數值型數據
data = pd.get_dummies(data)
data.head()# 特征和目標值抽取
X = data.drop('charges', axis=1) # 訓練數據
y = data['charges'] # 目標值
X.head()

4、特征升維

特征升維是一種數據預處理技術,其核心目的是通過對原始特征進行組合、變換等操作,創造出更多的特征,從而增加數據的維度。

這有助于機器學習模型捕捉到數據中更復雜的模式和關系,尤其適用于處理線性模型難以擬合的非線性數據。

為什么需要特征升維?

在很多實際問題中,數據的特征和目標變量之間可能存在非線性關系。

然而,像線性回歸這類基礎的線性模型,只能學習到特征和目標變量之間的線性關聯。

通過特征升維,能夠讓線性模型也具備一定捕捉非線性關系的能力,進而提升模型的擬合效果和預測能力。

from sklearn.linear_model import LinearRegression
from sklearn.linear_model import ElasticNet
from sklearn.metrics import mean_squared_error,mean_squared_log_error# 數據拆分
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import PolynomialFeatures
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2)# 特征升維
poly = PolynomialFeatures(degree= 2, include_bias = False)
X_train_poly = poly.fit_transform(X_train)
X_test_poly = poly.fit_transform(X_test)

5、模型訓練與評估

普通線性回歸:

model_1 = LinearRegression()
model_1.fit(X_train_poly, y_train)
print('測試數據得分:',model_1.score(X_train_poly,y_train))
print('預測數據得分:',model_1.score(X_test_poly,y_test))
print('訓練數據均方誤差:',np.sqrt(mean_squared_error(y_train,model_1.predict(X_train_poly))))
print('測試數據均方誤差:',np.sqrt(mean_squared_error(y_test,model_1.predict(X_test_poly))))print('訓練數據對數誤差:',np.sqrt(mean_squared_log_error(y_train,model_1.predict(X_train_poly))))
print('測試數據對數誤差:',np.sqrt(mean_squared_log_error(y_test,model_1.predict(X_test_poly))))

彈性網絡回歸:

model_2 = ElasticNet(alpha = 0.3,l1_ratio = 0.5,max_iter = 50000)
model_2.fit(X_train_poly,y_train)
print('測試數據得分:',model_2.score(X_train_poly,y_train))
print('預測數據得分:',model_2.score(X_test_poly,y_test))print('訓練數據均方誤差為:',np.sqrt(mean_squared_error(y_train,model_2.predict(X_train_poly))))
print('測試數據均方誤差為:',np.sqrt(mean_squared_error(y_test,model_2.predict(X_test_poly))))print('訓練數據對數誤差為:',np.sqrt(mean_squared_log_error(y_train,model_2.predict(X_train_poly))))
print('測試數據對數誤差為:',np.sqrt(mean_squared_log_error(y_test,model_2.predict(X_test_poly))))

結論:

  • 進行EDA數據探索,可以查看無關緊要特征
  • 進行特征工程:刪除無用特征、特征離散化、特征提取。這對機器學習都至關重要
  • 對于簡單的數據(特征比較少)進行線性回歸,一般需要進行特征升維
  • 選擇不同的算法,進行訓練和評估,從中篩選優秀算法

做完這兩個項目,最大的收獲不是模型多準,而是摸清了機器學習項目的套路,現在相信你可以進行簡單模型的建立和訓練了,快去試試吧!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/78980.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/78980.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/78980.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL數據庫系統全解析:從入門到實踐

一、數據庫世界入門指南 在數字時代,數據就像新時代的石油,而數據庫系統就是儲存和管理這些寶貴資源的倉庫。對于初學者來說,理解數據庫的基本概念是邁入這個領域的第一步。 數據庫本質上是一個有組織的數據集合,它允許我們高效…

【大模型】圖像生成:StyleGAN3:生成對抗網絡的革命性進化

深度解析StyleGAN3:生成對抗網絡的革命性進化 技術演進與架構創新代際技術對比StyleGAN3架構解析 環境配置與快速入門硬件要求安裝步驟預訓練模型下載 實戰全流程解析1. 圖像生成示例2. 自定義數據集訓練3. 潛在空間操作 核心技術深度解析1. 連續信號建模2. 傅里葉特…

PHP-Cookie

Cookie 是什么? cookie 常用于識別用戶。cookie 是一種服務器留在用戶計算機上的小文件。每當同一臺計算機通過瀏覽器請求頁面時,這臺計算機將會發送 cookie。通過 PHP,您能夠創建并取回 cookie 的值。 設置Cookie 在PHP中,你可…

“Everything“工具 是 Windows 上文件名搜索引擎神奇

01 Everything 和其他搜索引擎有何不同 輕量安裝文件。 干凈簡潔的用戶界面。 快速文件索引。 快速搜索。 快速啟動。 最小資源使用。 輕量數據庫。 實時更新。 官網:https://www.voidtools.com/zh-cn/downloads/ 通過網盤分享的文件:Every…

CSS:選擇器-基本選擇器

文章目錄 1、通配選擇器2、元素選擇器3、類選擇器4、ID選擇器 1、通配選擇器 2、元素選擇器 3、類選擇器 4、ID選擇器

一種動態分配內存錯誤的解決辦法

1、項目背景 一款2年前開發的無線網絡通信軟件在最近的使用過程中出現網絡中傳感器離線的問題,此軟件之前已經使用的幾年了,基本功能還算穩定。這次為什么出了問題。 先派工程師去現場調試一下,初步的結果是網絡信號弱,并且有個別…

React 第三十四節 Router 開發中 useLocation Hook 的用法以及案例詳解

一、useLocation基礎用法 作用:獲取當前路由的 location 對象 返回對象結構: {pathname: "/about", // 當前路徑search: "?namejohn", // 查詢參數(URL參數)hash: "#contact", …

DeepSeek-Prover-V2-671B最新體驗地址:Prover版僅適合解決專業數學證明問題

DeepSeek-Prover-V2-671B最新體驗地址:Prover版僅適合解決專業數學證明問題 DeepSeek 團隊于 2025 年 4 月 30 日正式在Hugging Face開源了其重量級新作 —— DeepSeek-Prover-V2-671B,這是一款專為解決數學定理證明和形式化推理任務而設計的超大規模語…

tornado_登錄頁面(案例)

目錄 1.基礎知識?編輯 2.腳手架(模版) 3.登錄流程圖(processon) 4.登錄表單 4.1后(返回值)任何值:username/password (4.1.1)app.py (4.1.2&#xff…

Android學習總結之自定義view設計模式理解

面試題 1:請舉例說明自定義 View 中模板方法模式的應用 考點分析 此問題主要考查對模板方法模式的理解,以及該模式在 Android 自定義 View 生命周期方法里的實際運用。 回答內容 模板方法模式定義了一個操作的算法骨架,把一些步驟的實現延…

【Scrapy】簡單項目實戰--爬取dangdang圖書信息

目錄 一、基本步驟 1、新建項目 :新建一個新的爬蟲項目 2、明確目標 (items.py):明確你想要抓取的目標 3、制作爬蟲 (spiders/xxspider.py):制作爬蟲開始爬取網頁 4、存儲內容 (p…

開源CMS系統的SEO優化功能主要依賴哪些插件?

在當今互聯網時代,搜索引擎優化(SEO)是網站獲取流量的核心手段之一。開源內容管理系統(CMS)因其靈活性和豐富的插件生態,成為許多開發者和企業的首選。本文將以主流開源CMS為例,深入解析其SEO優…

在 JMeter 中使用 BeanShell 獲取 HTTP 請求體中的 JSON 數據

在 JMeter 中,您可以使用 BeanShell 處理器來獲取 HTTP 請求體中的 JSON 數據。以下是幾種方法: 方法一:使用前置處理器獲取請求體 如果您需要在發送請求前訪問請求體: 添加一個 BeanShell PreProcessor 到您的 HTTP 請求采樣器…

在 WSL (Windows Subsystem for Linux) 中配置和安裝 Linux 環境

在 WSL (Windows Subsystem for Linux) 中配置和安裝 Linux 環境 WSL 允許你在 Windows 上運行 Linux 環境,以下是詳細的配置和安裝指南。 1. 安裝前的準備工作 系統要求 Windows 10 版本 2004 及更高版本(內部版本 19041 及更高版本)或 Windows 11 64 位系統 虛…

AlphaFold蛋白質結構數據庫介紹

AlphaFold Protein Structure Database (AlphaFold DB) 是 DeepMind + EMBL-EBI 合作開發的公開蛋白質結構預測數據庫,是利用 AlphaFold2/AlphaFold3 AI模型 預測的全基因組級蛋白質三維結構庫。 網址: https://alphafold.ebi.ac.uk 項目內容主辦單位DeepMind + EMBL-EBI上線…

3.2goweb框架GORM

GORM 是 Go 語言中功能強大的 ORM(對象關系映射)框架,支持 MySQL、PostgreSQL、SQLite、SQL Server 等主流數據庫。以下是 GORM 的核心概念和用法詳解: ??一、基礎入門?? 1. 安裝 go get -u gorm.io/gorm go get -u gorm.io…

第三部分:特征提取與目標檢測

像邊緣、角點、特定的紋理模式等都是圖像的特征。提取這些特征是許多計算機視覺任務的關鍵第一步,例如圖像匹配、對象識別、圖像拼接等。目標檢測則是在圖像中找到特定對象(如人臉、汽車等)的位置。 本部分將涵蓋以下關鍵主題: …

Canvas基礎篇:圖形繪制

Canvas基礎篇:圖形繪制 圖形繪制moveTo()lineTo()lineTo繪制一條直線代碼示例效果預覽 lineTo繪制平行線代碼示例效果預覽 lineTo繪制矩形代碼示例效果預覽 arc()arc繪制一個圓代碼實現效果預覽 arc繪制一段弧代碼實現效果預覽 arcTo()rect()曲線 結語 圖形繪制 在…

瑞芯微芯片算法開發初步實踐

文章目錄 一、算法開發的一般步驟1.選擇合適的深度學習框架2.對于要處理的問題進行分類,是回歸問題還是分類問題。3.對數據進行歸納和整理4.對輸入的數據進行歸一化和量化,保證模型運行的效率和提高模型運行的準確度5.在嵌入式處理器上面運行模型&#x…

計算機畢業設計--基于深度學習(U-Net與多尺度ViT)的模糊車牌圖像清晰化復原算法設計與實現(含Github代碼+Web端在線體驗鏈接)

基于深度學習的U-Net架構下多尺度Transformer車牌圖像去模糊算法設計與實現 如果想對舊照片進行模糊去除,劃痕修復、清晰化,請參考這篇CSDN作品👇 計算機畢業設計–基于深度學習的圖像修復(清晰化劃痕修復色彩增強)算…