首页 > 其他分享 >【大数据】机器学习-----线性模型

【大数据】机器学习-----线性模型

时间:2025-01-17 17:32:09浏览次数:3  
标签:plt 模型 np test train ----- 线性 import model

一、线性模型基本形式

线性模型旨在通过线性组合输入特征来预测输出。其一般形式为:

在这里插入图片描述

其中:

  • x = ( x 1 , x 2 , ⋯   , x d ) \mathbf{x}=(x_1,x_2,\cdots,x_d) x=(x1​,x2​,⋯,xd​) 是输入特征向量,包含 d d d 个特征。
  • w = ( w 1 , w 2 , ⋯   , w d ) \mathbf{w}=(w_1,w_2,\cdots,w_d) w=(w1​,w2​,⋯,wd​) 是权重向量,每个元素 w i w_i wi​ 表示对应特征的重要性。
  • w 0 = b w_0 = b w0​=b 是偏置项,允许模型在没有任何输入特征时也能进行预测。

二、线性回归

线性回归用于预测连续值,其目标是找到最佳的 w \mathbf{w} w 和 b b b 以最小化预测值 y ^ \hat{y} y^​ 与真实值 y y y 之间的均方误差(MSE)。给定一组包含 m m m 个样本的数据集 { ( x 1 , y 1 ) , ( x 2 , y 2 ) , ⋯   , ( x m , y m ) } \{(\mathbf{x}_1,y_1),(\mathbf{x}_2,y_2),\cdots,(\mathbf{x}_m,y_m)\} {(x1​,y1​),(x2​,y2​),⋯,(xm​,ym​)},均方误差的计算公式如下:

在这里插入图片描述

通常使用梯度下降法来优化这个目标函数,其更新规则如下:

对于权重 w j w_j wj​( j = 1 , 2 , ⋯   , d j = 1,2,\cdots,d j=1,2,⋯,d):
在这里插入图片描述

对于偏置项 b b b:
在这里插入图片描述

其中 α \alpha α 是学习率,控制每次更新的步长。

三、对数几率回归(逻辑回归)

逻辑回归用于二分类问题,将线性函数的输出通过逻辑函数(sigmoid 函数)转换为概率。逻辑函数定义为:
在这里插入图片描述

其目标是最大化似然函数,等价于最小化对数似然损失函数:

在这里插入图片描述

四、多分类学习

对于多分类问题,常用 softmax 函数将线性函数的结果转化为概率分布。假设类别数为 K K K,对于样本 i i i,首先计算线性函数的输出 z i k = w k T x i + b k z_{ik}=\mathbf{w}_k^T\mathbf{x}_i + b_k zik​=wkT​xi​+bk​,然后使用 softmax 函数:
在这里插入图片描述

其交叉熵损失函数为:

在这里插入图片描述

其中 y i k y_{ik} yik​ 是一个 one-hot 编码向量,如果样本 i i i 属于类别 k k k,则 y i k = 1 y_{ik}=1 yik​=1,否则 y i k = 0 y_{ik}=0 yik​=0。

五、类别不平衡问题

类别不平衡问题发生在不同类别样本数量差异较大时,这可能导致模型偏向于多数类。常见的解决方法包括:

1. 重采样

  • 过采样:复制少数类样本以增加其数量。
  • 欠采样:删除多数类样本以减少其数量。

2. 代价敏感学习

  • 在损失函数中为不同类别赋予不同的权重,使得少数类的错误分类代价更高。

代码示例

线性回归示例

import numpy as np
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
from sklearn.model_selection import train_test_split
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)

# 初始化线性回归模型
model = LinearRegression()

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 打印模型参数
print(f"Intercept: {model.intercept_}")
print(f"Coefficients: {model.coef_}")

# 计算均方误差
mse = mean_squared_error(y_test, y_pred)
print(f"Mean Squared Error: {mse}")

# 可视化结果
plt.scatter(X_test, y_test)
plt.plot(X_test, y_pred, color='red')
plt.xlabel('X')
plt.ylabel('y')
plt.title('Linear Regression')
plt.show()

在这里插入图片描述

逻辑回归示例

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt


# 生成二分类数据
np.random.seed(42)
X = np.random.randn(100, 2)
y = (X[:, 0] + X[:, 1] > 0).astype(int)

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

# 初始化逻辑回归模型
model = LogisticRegression()

# 训练模型
model.fit(X_train, y_train)

# 预测
y_pred = model.predict(X_test)

# 计算准确率
acc = accuracy_score(y_test, y_pred)
print(f"Accuracy: {acc}")

# 可视化决策边界
h = 0.02
x_min, x_max = X[:, 0].min() - 1, X[:, 0].max() + 1
y_min, y_max = X[:, 1].min() - 1, X[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8)
plt.scatter(X[:, 0], X[:, 1], c=y, edgecolors='k')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Logistic Regression')
plt.show()

在这里插入图片描述

多分类逻辑回归示例

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score
import matplotlib.pyplot as plt


# 生成多分类数据
# 调整 n_clusters_per_class 为 1 或调整 n_classes 为 2 或调整 n_informative 为 3 等
x, y = make_classification(n_samples=200, n_features=2, n_informative=2, n_redundant=0, n_classes=2, random_state=42)


# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(x, y, test_size=0.2)


# 初始化多分类逻辑回归模型
model = LogisticRegression(multi_class='multinomial', solver='lbfgs')


# 训练模型
model.fit(X_train, y_train)


# 预测
y_pred = model.predict(X_test)


# 计算准确率
acc = accuracy_score(y_test, y_pred)
print(f"Accuracy: {acc}")


# 可视化决策边界
h = 0.02
x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1
y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
Z = model.predict(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
plt.contourf(xx, yy, Z, cmap=plt.cm.coolwarm, alpha=0.8)
plt.scatter(x[:, 0], x[:, 1], c=y, edgecolors='k')
plt.xlabel('Feature 1')
plt.ylabel('Feature 2')
plt.title('Multiclass Logistic Regression')
plt.show()

在这里插入图片描述

类别不平衡问题示例(过采样)

import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score, f1_score
from sklearn.utils import resample


# 生成类别不平衡数据
X, y = make_classification(n_samples=1000, n_features=2, n_informative=2, n_redundant=0, weights=[0.9, 0.1], random_state=42)

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

# 原始模型
model = LogisticRegression()
model.fit(X_train, y_train)
y_pred = model.predict(X_test)
print(f"Original Accuracy: {accuracy_score(y_test, y_pred)}")
print(f"Original F1-score: {f1_score(y_test, y_pred)}")

# 过采样少数类
X_minority = X_train[y_train == 1]
y_minority = y_train[y_train == 1]
X_minority_upsampled, y_minority_upsampled = resample(X_minority, y_minority, replace=True, n_samples=X_train[y_train == 0].shape[0], random_state=42)
X_train_upsampled = np.vstack((X_train[y_train == 0], X_minority_upsampled))
y_train_upsampled = np.hstack((y_train[y_train == 0], y_minority_upsampled))

# 过采样后的模型
model_upsampled = LogisticRegression()
model_upsampled.fit(X_train_upsampled, y_train_upsampled)
y_pred_upsampled = model_upsampled.predict(X_test)
print(f"Upsampled Accuracy: {accuracy_score(y_test, y_pred_upsampled)}")
print(f"Upsampled F1-score: {f1_score(y_test, y_pred_upsampled)}")

在这里插入图片描述

代码解释

线性回归代码

  • np.random.rand(100, 1) 生成 100 个样本的特征数据。
  • LinearRegression() 创建线性回归模型。
  • model.fit(X_train, y_train) 训练模型。
  • model.predict(X_test) 进行预测。
  • mean_squared_error(y_test, y_pred) 计算均方误差。

逻辑回归代码

  • np.random.randn(100, 2) 生成二分类数据。
  • LogisticRegression() 创建逻辑回归模型。
  • model.fit(X_train, y_train) 训练模型。
  • accuracy_score(y_test, y_pred) 计算准确率。
  • 使用 meshgridcontourf 绘制决策边界。

多分类逻辑回归代码

  • make_classification 生成多分类数据。
  • LogisticRegression(multi_class='multinomial', solver='lbfgs') 创建多分类逻辑回归模型。
  • model.fit(X_train, y_train) 训练模型。
  • accuracy_score(y_test, y_pred) 计算准确率。

类别不平衡代码

  • make_classification 生成类别不平衡数据,通过 weights 参数控制类别比例。
  • resample 函数用于过采样少数类。
  • 比较原始模型和过采样后模型的准确率和 F1-score。

在这里插入图片描述

标签:plt,模型,np,test,train,-----,线性,import,model
From: https://blog.csdn.net/yuanbenshidiaos/article/details/145146928

相关文章

  • C语言新手入门---分支与循环(下)
    前言&概括鼠鼠也是才学C语言,屏幕前的各位多指教,鼠鼠耐骂。浅浅讲一下怎么使用C语言三种循环结构的语句:whilefordo…while1、while循环(1)if语句和while语句在形式上的对比两者在语法结构上基本都是一致的,再度提醒if无{}只能管理紧邻的一个句子。if(exp1){语句}while......
  • C语言新手入门---分支与循环(上)
    前言鼠鼠也是才学C语言,屏幕前的各位多指教,鼠鼠耐骂。编程里的分支结构要理解其实也就是数学里的树状图,把所需要的情况一点点根据数据分类好,再用编程语言的语法写好就行。一、if语句1、if本身用法如果判断表达式的结果为真(也就是表达式内容正确(或者说表达式返回的值非0),......
  • 编程题-最小高度树
    题目:给定一个有序整数数组,元素各不相同且按升序排列,编写一个算法,创建一棵高度最小的二叉搜索树。解法一(二分查找+二叉搜索树构建):二叉搜索树的中序遍历是升序序列,题目给定的数组是按照升序排列的有序数组,因此可以确保数组是二叉搜索树的中序遍历序列。二叉搜索树中,左子树的......
  • P1135 - 【入门】歌德巴赫猜想 -
    难度:4-题目描述任一个大于等于4的偶数都可以拆分为两个素数之和。(5.1.40)输入格式一个整数n(4<=n<=200)输出格式将小于等于n的偶数拆分为2个质数之和,列出所有方案!输入数据110输出数据14=2+26=3+38=3+510=3+710=5+5代码:#include<iostream>usingname......
  • P1126 - 【提高】英文翻译 -
    难度:8+输入格式一个自然数n,0<=n<=2^31-1。输出格式输出这个数的英文,最后不要有多余的空格。输入数据11111111111输出数据1onebilliononehundredandelevenmilliononehundredandeleventhousandonehundredandeleven 代码:#include<iostream>#incl......
  • Transformer 可视化分析 + 大模型推理策略:非常新颖的题材,发展也是一步一个脚印,没有那
    Transformer可视化分析+大模型推理策略:非常新颖的题材,发展也是一步一个脚印,没有那种一蹴而就的浮躁感背景介绍为什么Transformer理解单个词语意思+理解词语顺序+理解上下文,就能摆脱模式识别,灵活的读懂意思?Transformer分为四部分:文字编码、自注意力机制、神经网......
  • vue中使用axios获取不到响应头Content-Disposition的解决办法
    项目中,后端返回的文件流,fileName是机构名称+服务器时间。前端需要拿到响应头里的Content-Disposition字段的值,从中获取文件名在控制台Headers中可以看到相关的字段和文件名,但是在axios里面却获取不到 如果想要让客户端访问到相关信息,服务器不仅要在heade里添加,还要将它们在......
  • [Machine Learning] 使用经典聚类模型k均值(k-means)实现blobs聚类
    一、内容实现概述本文主要讲述使用scikit-learn库内置的kNN模型,实现鸢尾花分类。具体实现过程如下:1.导入所需库:预先导入numpy、matplotlib以及scikit-learn库2.导入数据:调用sklearn库内置的加载数据的方法make_blobs(),导入斑点数据3.数据预处理:对blobs数据进行预处理,获得......
  • Biotin sulfo-N-hydroxysuccinimide ester ;生物素磺基-N-羟基琥珀酰亚胺酯;生物素衍生
    一、生物素及其衍生物的概述      生物素衍生物是指在生物素(VitaminH或B7)分子基础上进行化学修饰得到的衍生化合物。这些衍生化合物在生物医学研究、临床诊断和药物开发等领域有着广泛的应用。    生物素(Biotin)是一种水溶性维生素,也被称为维生素H或维生素......
  • Laminin Pentapeptide YIGSR-NH2;层粘连蛋白五肽;抗黏附肽;YIGSR;LAMININ (929-933)肽;1105
    YIGSR 简介    YIGSR是一种能够抑制白血病细胞肿瘤生长和转移的多肽。YIGSR通过67kDa层粘连蛋白结合蛋白阻断细胞与层粘连蛋白I的结合,并抑制剪切诱导的层粘连蛋白细胞 eNOS 表达增加。   【中文名称】层粘连蛋白(929-933);抗黏附肽;酪氨酰-异亮氨酰-......