1.5、機器學習-回歸算法

1、線性回歸模型

線性回歸模型(Liner Regression),是利用線性擬合的方式來探尋數據背后的規律。通過搭建線性回歸模型,可以尋找這些散點(也稱樣本點)背后的趨勢線(也稱回歸曲線)。

借助回歸曲線,我們可以進行一些簡單的預測分析,或因果關系分析

1.1、一元線性回歸數學原理

一元線性回歸模型也稱為簡單線性回歸模型,其形式可以通過如下方程公式表達:

其中:y是目標(因)變量,x是特征(自)變量,a表示回歸系數,b表示截距。

一元線性回歸的目的,是擬合出一條線使得預測值()和實際值()盡可能的接近,如果大部分點都落在擬合出來的線上,那么該線性回歸模型擬合效果較好。

此外,我們可以通過兩者差值平方和(,也稱為殘值平方和)來進行衡量,在機器學習領域,該殘差平方和也被稱之為回歸模型的損失函數

1.2、一元線性回歸的代碼實現

在Python中,我們可以通過Scikit-learn工具庫,快速構建一元線性回歸模型。實現一元線性回歸的核心功能代碼如下:

from sklearn.linear_model import LinearRegression
from matplotlib import pyplot as plt
import matplotlib# pycharm工具:設置本地顯示后端
matplotlib.use('TkAgg')if __name__ == '__main__':X = [[1],[2],[3],[5]]Y = [2,4,6,8]# 1. 構建線性回歸模型對象lg = LinearRegression()# 2. 使用準備的自變量、因變量數據做訓練lg.fit(X, Y)# 3. 使用訓練好的模型預測新數據集y_pred = lg.predict([[4]])print(f"預測值:{y_pred[0]:.4f}") # 6.8571# 4. 繪制自變量、因變量組成的散點圖plt.scatter(X, Y, label='實際數據')# 5. 繪制訓練結果一元線性回歸方程plt.plot(X, lg.predict(X), color='red', label='回歸線')# 6. 展示執行效果|或使用Jupyter執行效果plt.show()

借助matplotlib工具,將模型進行可視化展示:

1.3、多元線性回歸

同理,多元線性回歸模型是在一元線性回歸模型基礎上,增加多個自變量,其形式可以通過如下方程公式表達:

其中:y是目標(因)變量,是特征(自)變量,表示權重系數,表示(誤差項)截距。

線性回歸使用均方誤差(MSE)作為損失函數

1.3.1、經典案例

此處,我們使用波士頓房價數據集(Boston Housing Dataset)一個經典的回歸分析數據集,常用于預測房價。

import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegressionif __name__ == '__main__':# 1. 數據加載data = pd.read_csv("boston_house_prices.csv", skiprows=1)# 2. 特征和標簽分離X = data.loc[:, :"LSTAT"].to_numpy()  # 特征y = data.loc[:, "MEDV"].to_numpy()    # 目標標簽# 3. 數據切分X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)# 4. 手動數據標準化(可用標準庫實現)mu = X_train.mean(axis=0)sigma = X_train.std(axis=0) + 1e-9X_train = (X_train - mu) / sigmaX_test = (X_test - mu) / sigma# 5. 模型訓練lr = LinearRegression()lr.fit(X=X_train, y=y_train)# 6. 預測與評估y_pred = lr.predict(X=X_test)mse = ((y_pred - y_test) ** 2).mean()print(f"均?誤差: {mse}")

1.3.2、實戰案例

案例:基于線性回歸模型的客戶價值預測

客戶價值可以幫助企業預測未來一段時間,客戶預計能夠為企業帶來多少利潤。嘗試結合已有的客戶價值數據表,完成以下功能。

1、結合客戶的價值數據,構建回歸模型;

歷史貸款金額貸款次數學歷月收入性別是否有房產客戶價值
500002220000112000
500003115000001200
1000005232000101800
-------
import pandas as pd
from sklearn.linear_model import LinearRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_reportif __name__ == '__main__':# 1. 加載數據df = pd.read_csv("cust_value_data.csv", skiprows=1)# 2. 查看原始數據信息print("原始數據前10行:")print(df.head(10))print("\n數據信息:")print(df.info())print("缺失值統計:")print(df.isnull().sum())# 3. 找出存在null值的行null_rows = df[df.isnull().any(axis=1)]print("\n存在缺失值的行:")print(null_rows)# 4. 數據預處理# 4.1. 均值填充:將age為null的使用均值填充age_mean = df['age'].mean()df['age'].fillna(age_mean, inplace=True)# 4.2. 缺失值填充:將貸款均值填充history_debit_mean = df['history_debit'].mean()df['history_debit'].fillna(history_debit_mean, inplace=True)# 4.3. 缺失值填充:將月收入均值填充month_income_mean = df['month_income'].mean()df['month_income'].fillna(month_income_mean, inplace=True)# 5. 選擇特征和目標變量# 選擇特征列和目標列feature_cols = ['history_debit', 'debit_times', 'degree', 'month_income', 'sex', 'house_flag']X = df[feature_cols]y = df['customer_value']# 6. 數據切分(70%訓練,30%測試)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 7. 模型訓練model = LinearRegression()model.fit(X_train, y_train)# 8. 預測與評估y_pred = model.predict(X_test)# 5. 模型評估accuracy = accuracy_score(y_test, y_pred)report = classification_report(y_test, y_pred)print("模型準確率:", accuracy)print("分類報告:")print(report)

2、邏輯回歸模型

邏輯回歸(Logistic Regression)是線性回歸的一種擴展,主要用來處理分類模型,因其簡單有效、可解釋性強的特點,目前在多行業中被廣泛應用。

邏輯回歸的本質,是將線性回歸模型(-∞,+∞)通過Sigmoid()函數(也稱Logistic函數)y = \frac{1} {1+e^{-z}}?進行了非線性轉換,從而得到一個介于(0,1)之間的概率值,從而實現分類的效果。

sigmoid函數代碼實現:

import numpy as np
import matplotlib.pyplot as pltdef sigmoid(x):"""Sigmoid 激活函數"""return 1 / (1 + np.exp(-x))if __name__ == '__main__':# 可視化 Sigmoid 函數x = np.linspace(-10, 10, 100)plt.plot(x, sigmoid(x))plt.grid()plt.title('Sigmoid Function')plt.xlabel('Input')plt.ylabel('Output')plt.show()

2.1、分類與回歸的區別

回歸模型:用于對連續變量進行預測,如預測收入范圍、房價變化、客戶價值等,線性回歸就是一種典型的回歸模型。

分類模型:用于對離散變量進行預測,分類模型預測的變量不是連續的,而是離散的一些類型。例如,使用常見的二分類模型,預測客戶是否違約、客戶是否會流失、腫瘤是良性還是惡性等。

2.2、經典案例

這是一個經典的二分類數據集,其目標是根據乳腺腫瘤的顯微圖像特征來診斷腫瘤是惡性(Malignant)還是良性(Benign)

from sklearn.datasets import load_breast_cancer
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_splitif __name__ == '__main__':# 1. 加載數據X, y = load_breast_cancer(return_X_y=True)# 2. 數據切分X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=0)# 3. 數據標準化mu = X_train.mean(axis=0)sigma = X_train.std(axis=0) + 1e-9X_train = (X_train - mu) / sigmaX_test = (X_test - mu) / sigma# 4. 模型訓練lr = LogisticRegression()lr.fit(X=X_train, y=y_train)# 5. 預測與評估y_pred = lr.predict(X=X_test)accuracy = (y_pred == y_test).mean()print(f"準確率: {accuracy:.4f}")# 查看模型參數print(f"權重數量: {lr.coef_.shape}")print(f"偏置項: {lr.intercept_}")

2.3、實戰案例

案例:信用卡客戶流失預警模型

客戶流失預警模型可以用于預測客戶未來的流失情況。針對流失概率較大的客戶,可以采取適當的措施進行挽留,有效降低客戶的流失率。根據案例數據集,完成以下功能:

用戶ID賬戶金額(元)用戶年齡學歷性別最后一次交易時間上月交易傭金(元)累計交易傭金(元)使用信用卡年限(年是否流失
100115200032本科2025/6/2232.21350050

1、結合信用卡客戶流失數據,構建邏輯回歸模型(分類)

2、結合已有的數據判斷模型預測準確性,查看每名客戶的預估流失概率

import pandas as pd
from datetime import datetime
from sklearn.linear_model import LogisticRegression
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, classification_reportif __name__ == '__main__':# 1. 加載數據df = pd.read_csv("credit_data.csv", skiprows=1)# 2. 查看原始數據信息print("原始數據前10行:")print(df.head(10))print("\n數據信息:")print(df.info())print("缺失值統計:")print(df.isnull().sum())# 3. 找出存在null值的行null_rows = df[df.isnull().any(axis=1)]print("\n存在缺失值的行:")print(null_rows)# 4. 數據預處理# 4.1. 刪除行:刪除amount為null的行df = df.dropna(subset=['amount'])# 4.2. 均值填充:將age為null的使用均值填充age_mean = df['age'].mean()df['age'].fillna(age_mean, inplace=True)# 4.3. 缺失值填充:將degree為null的使用"本科"填充df['degree'].fillna('本科', inplace=True)# 4.4. 刪除列:userId列(與訓練無關列),axis=1 表示刪除列df = df.drop('userId', axis=1)# 4.5.特征工程:性別編碼(男=0, 女=1)df['sex'] = df['sex'].map({'男': 0, '女': 1})current_date = datetime.now()# 4.6 最后一次交易時間處理為距現在時間的天數df['last_txn_time'] = pd.to_datetime(df['last_txn_time'])df['days_since_last_txn'] = (current_date - df['last_txn_time']).dt.days# 4.7 對學歷進行one-hot編碼,并避免多重共線性(刪除基準類別"本科")degree_dummies = pd.get_dummies(df['degree'], prefix='degree')if 'degree_本科' in degree_dummies.columns:degree_dummies = degree_dummies.drop('degree_本科', axis=1)# axis=1,指定df,degree_dummiesdf = pd.concat([df, degree_dummies], axis=1)# 5. 選擇特征和目標變量# 選擇特征列和目標列feature_cols = ['amount', 'age', 'last_month_kickback', 'accu_kickback', 'used_limit', 'days_since_last_txn', 'sex']X = df[feature_cols + degree_dummies.columns.tolist()]y = df['loss_flag']# 6. 數據切分(70%訓練,30%測試)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=42)# 7. 模型訓練model = LogisticRegression(random_state=42)model.fit(X_train, y_train)# 8. 預測與評估y_pred = model.predict(X_test)# 5. 模型評估accuracy = accuracy_score(y_test, y_pred)report = classification_report(y_test, y_pred)print("模型準確率:", accuracy)print("分類報告:")print(report)

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

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

相關文章

eclipse 安裝 lombok

好久沒有用eclipse,新裝eclipse 發現lombok 沒有生效,如下安裝最省事,無需安裝plugin等。 進入maven 本地目錄,如:org\projectlombok\lombok\1.18.38,點擊lombok jar文件指定eclipse 目錄,安裝完…

linux離線安裝elasticsearch8.19.3

下載: 官網多版本下載: Past Releases of Elastic Stack Software | Elastic github多版本下載: https://github.com/elastic/elasticsearch/releases 上傳后解壓到當前目錄 tar -zxvf elasticsearch-8.19.3-linux-x86_64.tar.gz 或指定解壓目錄 tar -xzf elasticsearch-8…

Uniapp中進行微信小程序頭像和昵稱的更改

一、官方文檔: 1、wx.getUserInfo(uni.getUserInfo):基礎庫版本低于2.27.1可用 ① 文檔鏈接: https://developers.weixin.qq.com/miniprogram/dev/api/open-api/user-info/wx.getUserInfo.htmlhttps://uniapp.dclou…

交換機詳細

交換機(Sritch):一種用于電(光)信號轉發的網絡設備,可以為接入交換機的任意兩個網絡節點提供獨享的電信號通路。解決什么問題?多臺設備之間的數據交換的問題。因此根據它的功能,它通…

功能強大的多線程端口掃描工具,支持批量 IP 掃描、多種端口格式輸入、掃描結果美化導出,適用于網絡安全檢測與端口監控場景

工具介紹 PortScanner - 多線程端口掃描工具,一款功能強大的多線程端口掃描工具,支持批量 IP 掃描、多種端口格式輸入、掃描結果美化導出,適用于網絡安全檢測與端口監控場景。🌟 功能特性 🔍 靈活的掃描目標&#xff1…

【OpenHarmony文件管理子系統】文件訪問接口mod_fileio解析

OpenHarmony文件訪問接口mod_fileio解析 概述 mod_fileio模塊是OpenHarmony文件管理API中的核心模塊之一,提供了完整的文件I/O操作功能。該模塊基于Node.js N-API構建,為JavaScript應用提供了豐富的文件系統操作接口,包括文件讀寫、目錄操作、…

js逆向Webpack模塊加載機制解析:從數組到JSONP

1. 概述 Webpack作為現代前端開發中最流行的模塊打包工具,其模塊加載機制值得深入理解。本文將解析Webpack的幾種模塊加載方式,包括數組形式、鍵值對形式和JSONP動態加載。只有理解了它的相關加載機制,我們才可以進行逆向工作。 2. 數組形式的…

Joplin-解決 Node.js 中 “digital envelope routines::unsupported“ 錯誤

解決 Node.js 中 “digital envelope routines::unsupported” 錯誤 在使用 Webpack 構建 Joplin 插件時,你可能會遇到 error:0308010C:digital envelope routines::unsupported 錯誤。這個錯誤看起來很復雜,但實際上有明確的原因和解決方案。 錯誤原因…

UE5 UAT

通過UAT 打包的流程&#xff0c;先整理這么點入口// Engine\Source\Programs\AutomationTool\Program.cs /// <summary> /// Main entry point /// </summary> public partial class Program {public static async Task<int> Main(string[] Arguments){Logge…

Python帶狀態生成器完全指南:從基礎到高并發系統設計

引言&#xff1a;狀態化生成器的核心價值在復雜系統開發中&#xff0c;帶狀態的生成器是處理復雜邏輯的核心工具。根據2024年Python開發者調查報告&#xff1a;78%的狀態機實現使用帶狀態生成器85%的數據管道依賴狀態化生成器92%的并發系統需要狀態管理65%的算法優化通過狀態化…

Python元組:不可變但靈活的數據容器

Python元組&#xff1a;不可變但靈活的數據容器 元組(tuple)是Python中一種不可變(immutable)但功能靈活的有序集合數據類型&#xff0c;具有以下核心特性&#xff1a;一、基本特性 不可變性?&#xff1a;創建后不能修改元素&#xff08;增刪改操作均不允許&#xff09; 有序存…

FastGPT源碼解析 Agent 大模型對接接口和使用詳解

FastGPT 大模型對接核心代碼分析 核心架構概覽 FastGPT 采用統一模型抽象層設計&#xff0c;通過標準化接口對接多種大模型&#xff0c;支持 LLM、Embedding、ReRank、TTS、STT 等多種 AI 能力。 支持各種大模型能力的配置&#xff0c;包括本地ollama、各個AI云廠商的API接入配…

AI Compass前沿速覽:Kimi K2、InfinityHuman-AI數字人、3D-AI桌面伴侶、疊疊社–AI虛擬陪伴

AI Compass前沿速覽&#xff1a;Kimi K2、InfinityHuman-AI數字人、3D-AI桌面伴侶、疊疊社–AI虛擬陪伴 AI-Compass 致力于構建最全面、最實用、最前沿的AI技術學習和實踐生態&#xff0c;通過六大核心模塊的系統化組織&#xff0c;為不同層次的學習者和開發者提供從完整學習路…

如何下載B站視頻,去水印,翻譯字幕

首先先來看下如何下載B站視頻及音頻工具&#xff1a;手機下載視頻打開文件管理器&#xff0c;找到video.m4s和audio.m4s兩個文件更改文件后綴名第一步到此為止然后我們再來看一下如何去水印&#xff0c;去字幕工具&#xff1a;剪映導入視頻選擇蒙版 > 鏡面點擊反轉點擊基礎&…

用 Cursor AI 快速開發你的第一個編程小程序

Cursor AI 作為新一代 AI 編程助手&#xff0c;集成了代碼補全、智能調試、自動生成等強大功能&#xff0c;非常適合用來開發小型應用或小程序。本文我將手把手帶你用 Cursor AI 開發一個簡單的天氣查詢小程序&#xff0c;并在文中推薦一門實用的商業變現課程&#xff0c;助你走…

MacOS 使用 luarocks+wrk+luajit

MacOS 使用 luarockswrkluajit luarocks 默認使用的是 lua 5.4 版本&#xff0c;一些工具&#xff0c;例如 wrk 使用的 lua 5.1&#xff0c;那么 luarocks 在安裝依賴的時候就需要指定 lua 5.1。 luarocks config 配置 lua 5.1 請確保已經安裝了 lua5.1 或者 luajit&#xff0c…

PostgreSQL18-FDW連接的 SCRAM 直通身份驗證

PostgreSQL18-FDW連接的 SCRAM 直通身份驗證 PostgreSQL 18 為使用 postgres_fdw 或 dblink_fdw 的人帶來了很好的改進&#xff1a;SCRAM 直通身份驗證。設置外部服務器連接時&#xff0c;您不再需要在“用戶映射”選項中存儲純文本密碼。 這是實現它的提交&#xff1a; commit…

“臥槽,系統又崩了!”——別慌,這也許是你看過最通俗易懂的分布式入門

在分布式系統中&#xff0c;有效應對節點故障、網絡分區延遲和數據一致性等挑戰至關重要。本文將剖析保障分布式系統可靠性的核心機制&#xff1a;數據分片實現水平擴展&#xff0c;冗余副本保障數據高可用&#xff0c;租約&#xff08;Lease&#xff09;機制優化節點狀態共識與…

【代碼隨想錄算法訓練營——Day4】鏈表——24.兩兩交換鏈表中的節點、19.刪除鏈表的倒數第N個節點、面試題02.07.鏈表相交、142.環形鏈表II

LeetCode題目鏈接 https://leetcode.cn/problems/swap-nodes-in-pairs/ https://leetcode.cn/problems/remove-nth-node-from-end-of-list/ https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/description/ https://leetcode.cn/problems/linked-list-cycle…

C#中一段程序類比博圖

using system //博圖中要使用自帶指令庫&#xff0c;指令庫名稱叫systemnamespace Simple//博圖建立程序&#xff0c;分診斷文件夾&#x1f4c2;&#xff0c;vision文件夾&#xff0c;通訊Db文件夾&#x1f4c2;等等&#xff0c;simple類似博圖中的文件夾名稱{class Program//程…