首页 > 其他分享 >线性回归和逻辑回归

线性回归和逻辑回归

时间:2024-07-29 12:59:41浏览次数:7  
标签:逻辑 plt 回归 test train 线性 import model

线性回归(Linear Regression)

原理

线性回归是一种统计方法,用于研究因变量(目标变量)与一个或多个自变量(特征变量)之间的线性关系。它通过拟合一条直线(或一个平面,在多维情况下)来最小化预测值与实际值之间的误差。

线性回归有两种形式:

  1. 简单线性回归:仅涉及一个自变量。
  2. 多元线性回归:涉及多个自变量。
公式

线性回归模型的公式如下:

其中:

  • y 是因变量。
  • β0 是截距(intercept)。
  • β1,β2,⋯,βn 是各自变量的回归系数。
  • x1,x2,⋯,xn 是自变量。
  • ϵ 是误差项。

通过最小化误差平方和(Ordinary Least Squares, OLS),可以估计回归系数。

生活场景应用的案例

房价预测:假设我们有一个包含房屋面积、房龄、房间数等特征的数据集,我们可以使用线性回归模型来预测房价。

代码解析

下面是一个使用Python实现线性回归的示例,使用了scikit-learn库。

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
import matplotlib.pyplot as plt

# 生成示例数据
np.random.seed(42)
X = 2 * np.random.rand(100, 1)
y = 4 + 3 * X + np.random.randn(100, 1)

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建线性回归模型并训练
model = LinearRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估模型
mse = mean_squared_error(y_test, y_pred)
r2 = r2_score(y_test, y_pred)

print(f"Mean Squared Error: {mse}")
print(f"R-squared: {r2}")

# 打印回归系数
print("Intercept:", model.intercept_)
print("Coefficient:", model.coef_)

# 可视化
plt.scatter(X_test, y_test, color='blue', label='Actual')
plt.plot(X_test, y_pred, color='red', linewidth=2, label='Predicted')
plt.xlabel('Feature')
plt.ylabel('Target')
plt.legend()
plt.show()

在这个示例中:

  1. 我们生成了一些随机数据作为示例。
  2. 将数据集拆分为训练集和测试集。
  3. 使用训练集训练线性回归模型。
  4. 通过测试集进行预测并评估模型的性能。
  5. 输出均方误差(MSE)和R平方值(R-squared)作为模型评估指标。
  6. 通过绘制数据点和回归直线来直观地理解模型的效果。

逻辑回归(Logistic Regression)

原理

逻辑回归是一种分类算法,尽管其名称中带有“回归”。它用于预测一个事件发生的概率,通过对数几率(log-odds)的线性组合来建模。逻辑回归通常用于二分类问题,但也可以扩展到多分类问题。

逻辑回归模型的核心是Sigmoid函数,它将线性组合的结果转换为概率值:

其中 z=β0+β1x1+β2x2+⋯+βnxn

公式

逻辑回归的公式为:

其中:

  • P(y=1∣x) 是事件 y=1 发生的概率。
  • β0,β1,⋯,βn是模型的参数(权重)。
  • x1,x2,⋯,xn 是自变量(特征)。
生活场景应用的案例

垃圾邮件分类:逻辑回归常用于电子邮件的垃圾分类。假设我们有一个电子邮件数据集,每封邮件都有一些特征(如是否包含特定关键词、发件人地址等),我们可以使用逻辑回归模型来预测邮件是否为垃圾邮件。

案例描述

假设我们有一个电子邮件数据集,其中每封邮件都有若干特征,如:

  • 是否包含特定关键词(如“免费”、“促销”等)。
  • 发件人地址是否在黑名单中。
  • 邮件长度。

我们希望通过这些特征预测邮件是否为垃圾邮件。我们可以将这些特征作为自变量,将邮件的标签(垃圾邮件或非垃圾邮件)作为因变量,使用逻辑回归模型进行训练和预测。模型训练完成后,我们可以使用它来预测新邮件是否为垃圾邮件,并评估模型的性能。

代码解析

下面是一个使用Python实现逻辑回归的示例,使用了scikit-learn库。

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification

# 生成示例数据
X, y = make_classification(n_samples=1000, n_features=10, n_informative=2, n_redundant=2, random_state=42)

# 拆分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建逻辑回归模型并训练
model = LogisticRegression()
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
cm = confusion_matrix(y_test, y_pred)
report = classification_report(y_test, y_pred)

print(f"Accuracy: {accuracy}")
print("Confusion Matrix:")
print(cm)
print("Classification Report:")
print(report)

# 可视化
plt.figure(figsize=(8, 6))
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_test, marker='o', label='Actual', alpha=0.5)
plt.scatter(X_test[:, 0], X_test[:, 1], c=y_pred, marker='x', label='Predicted', alpha=0.5)
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.legend()
plt.show()

在这个示例中:

  1. 我们生成了一个包含10个特征的二分类数据集。
  2. 将数据集拆分为训练集和测试集。
  3. 使用训练集训练逻辑回归模型。
  4. 通过测试集进行预测并评估模型的性能。
  5. 输出准确率(accuracy)、混淆矩阵(confusion matrix)和分类报告(classification report)。
  6. 通过绘制实际标签和预测标签的数据点来可视化分类结果。

标签:逻辑,plt,回归,test,train,线性,import,model
From: https://blog.csdn.net/LS_Ai/article/details/140768359

相关文章

  • 华南理工大学线性代数笔记整理3——向量代数与应用几何
    本人华工21级电信本科生,目前大四,前段时间收拾书本时发现了自己保存完整的线代笔记和一些整理,应该会对大一新生的期末考试起作用,故作分享。注:大一时本人都是用手写A4纸的方式做笔记做复习,所以这里上传的都是一些纸质笔记的扫描件,尽量可以保证清晰。以分章节的方式,本章为第3章......
  • JCR一区级 | Matlab实现SSA-Transformer-LSTM多变量回归预测
    JCR一区级|Matlab实现SSA-Transformer-LSTM多变量回归预测目录JCR一区级|Matlab实现SSA-Transformer-LSTM多变量回归预测效果一览基本介绍程序设计参考资料效果一览基本介绍1.【JCR一区级】Matlab实现SSA-Transformer-LSTM多变量回归预测,麻雀搜索算法(S......
  • 408 数据结构线性表算法
    第一章线性表定义:线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列。线性表的表示:若用L命名,表示:L=(a1,a2,a3,a4,a5,……,an)线性表的逻辑特性:a1:唯一的表头元素an:唯一的表尾元素除去a1:每个元素有且仅有一个直接前驱除去an:每个元素有且仅有一个直接后继......
  • 线性代数
    线性代数一.标量只有一个元素的张量importtorch#pytorch引用x=torch.tensor(3.0)y=torch.tensor(4.0)print(x)print(y)print(x+y)print(x**y)#x的y次方二.向量 (1)由标量值组成的列表a=torch.arange(5)print(a)print(a[3])#下标从0开始输出:(2)张量长度和形状h=......
  • 可逆矩阵的概念、定理、判断条件和性质(线性代数基础)
    可逆矩阵的概念、定理、判断条件和性质可逆矩阵的概念定义:设AAA为n......
  • Java基础09:逻辑运算符、位运算符
    逻辑运算符逻辑与:&&和&,逻辑或:||和|,逻辑非:!。publicstaticvoidmain(String[]args){ booleana=true; booleanb=false; System.out.println("a&&b="+(a&&b));//false System.out.println("a||b="+(a||b));......
  • R语言随机森林RandomForest、逻辑回归Logisitc预测心脏病数据和可视化分析|附代码数据
    全文链接:http://tecdat.cn/?p=22596最近我们被客户要求撰写关于预测心脏病的研究报告,包括一些图形和统计输出。本报告是对心脏研究的机器学习/数据科学调查分析。更具体地说,我们的目标是在心脏研究的数据集上建立一些预测模型,并建立探索性和建模方法。但什么是心脏研究?研究大纲......
  • R语言分布滞后非线性模型(DLNM)研究发病率,死亡率和空气污染示例|附代码数据
    全文下载链接:http://tecdat.cn/?p=21317最近我们被客户要求撰写关于分布滞后非线性模型(DLNM)的研究报告,包括一些图形和统计输出。本文提供了运行分布滞后非线性模型的示例,同时描述了预测变量和结果之间的非线性和滞后效应,这种相互关系被定义为暴露-滞后-反应关联数据集包含1987-......
  • 线性规划对偶与网络流
    线性规划对偶与网络流1https://ac.nowcoder.com/acm/contest/81598/KK-SlaytheSpire:GameDesign题目大意给定一个\(n\)个点\(m\)条边的有向无环图\(G=(V,E)\)以及一个整数\(k\),其中所有无入度的点为源点,所有无出度的点为汇点。要求选择最少数量的非源点和......
  • 0401-403组合逻辑电路的分析设计&竞争冒险
    组合逻辑电路的分析设计&竞争冒险4.组合逻辑电路1.目录2.教学基本要求3.序关于组合逻辑电路4.1组合逻辑电路分析与设计一、组合逻辑电路分析二、组合逻辑电路的分析步骤:三、组合逻辑电路的分析举例例1奇校验电路例2.对输入的二进制求反码例3.一个工厂发电的实际问题例......