前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >二分类问题的解决利器:逻辑回归算法详解(一)

二分类问题的解决利器:逻辑回归算法详解(一)

原创
作者头像
小馒头学Python
发布于 2023-11-24 10:02:23
发布于 2023-11-24 10:02:23
80004
代码可运行
举报
文章被收录于专栏:小馒头学Python小馒头学Python
运行总次数:4
代码可运行

🍋引言

逻辑回归机器学习领域中一种重要的分类算法,它常用于解决二分类问题。无论是垃圾邮件过滤、疾病诊断还是客户流失预测,逻辑回归都是一个强大的工具。本文将深入探讨逻辑回归的原理、应用场景以及如何在Python中实现它。

🍋逻辑回归的原理

逻辑回归是一种广义线性模型(Generalized Linear Model,简称GLM),它的目标是根据输入特征的线性组合来预测二分类问题中的概率。具体来说,逻辑回归通过使用Sigmoid函数(又称为Logistic函数)将线性输出映射到0到1之间的概率值。Sigmoid函数的数学表达式如下:

其中,P ( Y = 1 ∣ X ) P(Y=1|X)P(Y=1∣X) 表示在给定输入特征X的条件下,目标变量Y等于1的概率。β 0 , β 1 , … , β n \beta_0, \beta_1, \ldots, \beta_nβ0​,β1​,…,βn​ 是模型的权重参数,X 1 , X 2 , … , X n X_1, X_2, \ldots, X_nX1​,X2​,…,Xn​ 是输入特征。

逻辑回归的训练目标是找到最佳的权重参数,使得模型的预测结果与实际观测值尽可能一致。这通常通过最大化似然函数或最小化对数损失函数来实现。

🍋逻辑回归的应用场景

逻辑回归在各个领域都有广泛的应用,以下是一些常见的场景:

  • 垃圾邮件检测: 逻辑回归可以根据邮件的内容和特征来预测一封邮件是否是垃圾邮件。
  • 医学诊断: 在医学领域,逻辑回归可以用于预测患者是否患有某种疾病,基于患者的临床特征和实验室检测结果。
  • 金融风险管理: 逻辑回归可用于评估客户违约的概率,帮助银行和金融机构做出信贷决策。
  • 社交网络分析: 逻辑回归可以用于社交网络中的用户行为分析,例如预测用户是否会点击广告或关注某个话题。

🍋逻辑回归的实现

这里我们准备封装一个逻辑回归的py文件,命名为LogisticRegression.py 这里我们首先需要导入需要的库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.metrics import accuracy_score
import numpy as np

accuracy_score函数用于计算分类模型的准确率,它是一个评估分类模型性能的常用指标。准确率表示正确分类的样本数量占总样本数量的比例。在机器学习中,通常希望模型的准确率越高越好,因为它衡量了模型对数据的分类能力。

之后我们定义一个LogisticRegression类,接下来的代码,我们将写在此类中 首先是初始化函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def __init__(self):
        """初始化LinearRegression模型"""
        self.coef_ = None  # 系数
        self.interception_ = None  # 截距
        self._theta = None

self.coef_ = None 创建了一个对象属性coef_,并将其初始化为None。coef_通常用来存储线性回归模型的系数(也称为权重),这些系数用于预测目标变量。在初始化时,这些系数还没有被计算,因此被设置为None。

self.interception_ = None 创建了一个对象属性interception_,并将其初始化为None。interception_通常用来存储线性回归模型的截距,也就是模型在特征值为零时的预测值。在初始化时,截距也还没有被计算,因此被设置为None。

self._theta = None 最后一行代码创建了一个对象属性_theta,同样初始化为None。这个属性可能用于存储模型的参数(系数和截距),但是它以一个下划线 _ 开头,这通常表示该属性是类内部使用的,不应该直接被外部访问或修改。

之后我们定义一个逻辑回归特有的函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def sigmoid(self, t):
        return 1 / (1 + np.exp(-t))

这个函数用来计算Sigmoid函数的值。Sigmoid函数的数学表达式如下:

其中,t tt 是输入参数。函数使用NumPy库中的np.exp()函数计算e ee的负t次方,然后将1除以这个结果,得到Sigmoid函数的值。Sigmoid函数的输出范围是0到1之间,当t tt趋向于正无穷时,Sigmoid函数趋近于1,而当t tt趋向于负无穷时,Sigmoid函数趋近于0。这使得Sigmoid函数在二分类问题中常用于将线性输出映射到概率值。

之后我们定义fit函数用于训练模型,采用的方法是批量梯度下降来最小化逻辑回归的损失函数,从而找到最优的模型参数,这里我将进行详细说明

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fit(self, x_train, y_train, eta=0.01, n_iters=1e4, epsilon=1e-8):
        """根据给定的x_train和y_train 使用梯度下降法训练LogisticRegression模型"""

        def J(theta, X_b, y):  # 计算损失函数J的值,theta是参数
            y_hat = self.sigmoid(X_b.dot(theta))
            try:
                return -np.sum(y * np.log(y_hat) + (1 - y) * np.log(1 - y_hat)) / len(
                    X_b)  # 稍微有点理解迷糊,y真实减去y预测 平方,然后除以个数
            except:
                # 返回一个float的最大值
                return float('inf')

        def dJ(theta, X_b, y):  # theta是一个向量
            y_hat = self.sigmoid(X_b.dot(theta))
            return X_b.T.dot(y_hat - y) / len(X_b)

        def gradient_descent(X_b, y, initial_theta, eta, n_iters, epsilon):  # 传入一个最大迭代次数,1万
            theta = initial_theta
            iters = 0
            while iters < n_iters:
                gradient = dJ(theta, X_b, y)
                last_theta = theta
                theta = theta - gradient * eta
                if abs(J(theta, X_b, y) - J(last_theta, X_b, y)).all() < epsilon:  # 这里应该是all还是any?  结果好像是一样,不加会报错
                    break
                iters += 1
            return theta

        X_b = np.hstack([np.ones((len(x_train), 1)), x_train])
        # 根据给定的x_train计算出X_b
        initial_theta = np.zeros(X_b.shape[1])
        # 创建出一个空的theta向量
        self._theta = gradient_descent(X_b, y_train, initial_theta, eta, n_iters, epsilon)
        self.interception_ = self._theta[0]
        self.coef_ = self._theta[1:]
        return self

def fit(self, x_train, y_train, eta=0.01, n_iters=1e4, epsilon=1e-8): 这是fit方法的定义,它接受训练数据x_train和对应的目标变量y_train作为输入,还包括三个可选参数:eta(学习率,默认为0.01)、n_iters(最大迭代次数,默认为1万)、epsilon(用于判断收敛的小量值,默认为1e-8)。

def J(theta, X_b, y): 这是一个内部函数,用于计算损失函数的值。传入参数包括模型参数theta、带有偏置项的训练数据X_b,以及目标变量y。损失函数的定义使用了逻辑回归的交叉熵损失函数。

def dJ(theta, X_b, y): 这是另一个内部函数,用于计算损失函数关于参数theta的梯度。梯度是损失函数关于参数的导数,它告诉我们在当前参数值下,损失函数增加最快的方向。这里使用了逻辑回归的梯度计算公式。

def gradient_descent(X_b, y, initial_theta, eta, n_iters, epsilon): 这是用于执行梯度下降法的内部函数。它接受训练数据X_b、目标变量y、初始参数initial_theta、学习率eta、最大迭代次数n_iters以及收敛判定值epsilon。在循环中,它计算梯度并更新参数,直到满足停止条件(收敛或达到最大迭代次数)。

X_b = np.hstack([np.ones((len(x_train), 1)), x_train]) 这一行代码创建了一个新的特征矩阵X_b,通过在训练数据前面添加一列全为1的列来实现,以处理截距项。

initial_theta = np.zeros(X_b.shape[1]) 这一行代码创建了一个初始的参数向量initial_theta,并将其初始化为全零向量。

self._theta = gradient_descent(X_b, y_train, initial_theta, eta, n_iters, epsilon) 这一行代码调用了gradient_descent函数,使用梯度下降法来训练模型并获得最优的参数向量self._theta。

self.interception_ = self.theta[0] self.coef = self.theta[1:] 这两行代码将参数向量self.theta中的第一个元素作为截距项赋值给self.interception,将其余的元素作为系数赋值给self.coef

return self 最后,fit方法返回模型对象自身,以便进行链式操作。

这里我们再定义一个随机梯度下降

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fit_sgd(self, X_train, y_train, n_iters=5, t0=5, t1=50):  # 这里的n_iters代表 整个数据看几轮,不能取10000
        assert X_train.shape[0] == y_train.shape[0]

        def dJ_sgd(theta, X_b_i, y_i):  # 计算梯度,不需要m了,因为是随机挑选出一行数据
            return X_b_i.T.dot(X_b_i.dot(theta) - y_i) * 2

        def sgd(X_b, y, initial_theta, n_iters, t0=5, t1=50):  # 随机梯度下降法
            def learning_rate(t):
                return t0 / (t + t1)

            theta = initial_theta
            m = len(X_b)
            
            for cur_iter in range(n_iters):             
                random_indexs = np.random.permutation(m)  # 随机打乱样本
                X_b_new = X_b[random_indexs]
                y_new = y[random_indexs]
               
                for i in range(m):
                    gradient = dJ_sgd(theta, X_b_new[i], y_new[i])
                    theta = theta - gradient * learning_rate(cur_iter * m + i)
            return theta

        X_b = np.hstack([np.ones((len(X_train), 1)), X_train])
        initial_theta = np.random.randn(X_b.shape[1])
        self._theta = sgd(X_b, y_train, initial_theta, n_iters, t0=5, t1=50)
        self.interception_ = self._theta[0]
        self.coef_ = self._theta[1:]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def fit_sgd(self, X_train, y_train, n_iters=5, t0=5, t1=50):

这是fit_sgd方法的定义,与之前的方法不同,它使用随机梯度下降来训练模型。接受训练数据X_train和对应的目标变量y_train,以及可选的参数:n_iters(迭代轮数,默认为5,表示整个数据集会被遍历5次)、t0 和 t1(用于计算学习率的超参数,默认分别为5和50)。

assert X_train.shape[0] == y_train.shape[0] 这一行代码用于确保训练数据X_train和目标变量y_train的样本数量一致,以避免数据维度不匹配的问题。

def dJ_sgd(theta, X_b_i, y_i): 这是一个内部函数,用于计算随机梯度下降的梯度。传入参数包括模型参数 theta、一个样本的特征向量 X_b_i,以及对应的目标变量 y_i。梯度计算使用了逻辑回归的梯度公式,但仅针对单个样本。

def sgd(X_b, y, initial_theta, n_iters, t0=5, t1=50): 这是执行随机梯度下降的内部函数。它接受特征矩阵 X_b、目标变量 y、初始参数 initial_theta、迭代轮数 n_iters,以及学习率计算的超参数 t0 和 t1。

learning_rate(t) 是一个学习率调度函数,根据当前迭代轮数 t 来计算学习率。学习率在每轮迭代中都会发生变化,起初较大,后来逐渐减小,这有助于随机梯度下降的收敛。

随机梯度下降的主要循环包括迭代整个数据集 n_iters 次。在每次迭代中,首先对样本进行随机打乱(打乱顺序),然后遍历每个样本,计算梯度并更新参数。

X_b = np.hstack([np.ones((len(X_train), 1)), X_train]) 这一行代码与之前类似,将原始特征矩阵 X_train 转换为带有截距项的特征矩阵 X_b。

initial_theta = np.random.randn(X_b.shape[1]) 这一行代码创建了一个随机初始化的参数向量 initial_theta,用作随机梯度下降的起点。

self._theta = sgd(X_b, y_train, initial_theta, n_iters, t0=5, t1=50) 这一行代码调用了 sgd 函数来执行随机梯度下降,训练模型,并获取最优的参数向量 self._theta。

self.interception_ = self.theta[0] self.coef = self.theta[1:] 这两行代码将参数向量 self.theta 中的第一个元素作为截距项赋值给 self.interception,将其余的元素作为系数赋值给 self.coef

最后我们进行预测的处理

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def predict_prob(self, X_predict):
        X_b = np.hstack([np.ones((len(X_predict), 1)), X_predict])
        return self.sigmoid(X_b.dot(self._theta))

    def predict(self, X_predict):
        return np.array(self.predict_prob(X_predict) >= 0.5, dtype='int')

    def score(self, x_predict, y_test):
        y_predict = self.predict(x_predict)
        return accuracy_score(y_test, y_predict)

    def __repr__(self):
        return "LogisticRegression()"

predict_prob(self, X_predict): 这个方法用于对输入的特征数据 X_predict 进行预测,并返回预测的概率值。首先,它将输入数据 X_predict 扩展为带有截距项的特征矩阵 X_b,然后使用模型的参数 _theta 和 sigmoid 函数来计算每个样本的概率值。这个方法返回的是每个样本属于正类别的概率值,范围在0到1之间。

predict(self, X_predict): 这个方法使用 predict_prob 方法返回的概率值来进行二分类预测。它将概率值与阈值0.5进行比较,如果概率值大于等于0.5,则预测为正类别(1),否则预测为负类别(0)。返回的结果是一个包含0和1的数组,表示每个样本的预测类别。

score(self, x_predict, y_test): 这个方法用于评估模型的性能。它接受输入数据 x_predict 和对应的真实目标变量 y_test,并使用 predict 方法来进行预测。然后,它计算模型的准确率(Accuracy)分数,通过与真实标签进行比较来确定模型的预测精度。最终,这个方法返回模型的准确率作为性能评估的指标。

repr(self): 这是一个特殊方法,用于定义模型对象的字符串表示。当您创建模型对象并尝试打印它时,将返回该字符串,以便更好地描述模型。在这里,字符串表示简单地返回了 “LinearRegression()”,表示这是一个线性回归模型。


接下来我们用鸢尾花数据进行实践一下 首先还是导入库

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from sklearn.datasets import load_iris
from LogisticRegression import LogisticRegression
import numpy as np

之后做一些前期数据选择,分割数据集的准备

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
iris = load_iris()
y = iris.target
X = iris.data[y<2,:2]
y = y[y<2]
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.show()
X_train,X_test,y_train,y_test = train_test_split(X,y)

运行结果如下

之后我们进行拟合预测

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
log_reg = LogisticRegression()
log_reg.fit(X_train,y_train)
log_reg.score(X_test,y_test)

运行结果如下

之后我们创建一个用于可视化模型决策会边界的函数

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def x2(clf,x1):
    return (-clf.interception_-x1*clf.coef_[0])/clf.coef_[1]

并绘制图像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x_plot = np.linspace(4,7,100)
y_plot = x2(log_reg,x_plot)
plt.plot(x_plot,y_plot,color='r')
plt.scatter(X[y==0,0],X[y==0,1])
plt.scatter(X[y==1,0],X[y==1,1])
plt.show()

plt.scatter(X[y == 0,0], X[y == 0,1]) 和 plt.scatter(X[y == 1,0], X[y == 1,1]): 这两行代码用于绘制数据点的散点图。第一行绘制了属于类别0的数据点,第二行绘制了属于类别1的数据点。这样,你可以在图中看到不同类别的数据点的分布情况。

运行结果如下

接下来我们用测试集来演示一下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
plt.plot(x_plot,y_plot,color='r')
plt.scatter(X_test[y_test==0,0],X_test[y_test==0,1])
plt.scatter(X_test[y_test==1,0],X_test[y_test==1,1])
plt.show()

我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Tensorflow实现word2vec
摘要总结:本文研究了如何通过使用技术社区中的内容编辑人员来提高内容质量,并总结了相关的方法和实践。
GavinZhou
2018/01/02
1.4K0
Tensorflow实现word2vec
一文看懂Transformer内部原理(含PyTorch实现)
  "Attention is All You Need" 一文中提出的Transformer网络结构最近引起了很多人的关注。Transformer不仅能够明显地提升翻译质量,还为许多NLP任务提供了新的结构。虽然原文写得很清楚,但实际上大家普遍反映很难正确地实现。
10JQKA
2018/12/28
2.8K0
【AI 大模型】RAG 检索增强生成 ③ ( 文本向量 | Word2Vec 词汇映射向量空间模型 - 算法原理、训练步骤、应用场景、实现细节 | Python 代码示例 )
Word2Vec 是一个 将 词汇 映射 到 高维向量空间 的模型 , 其 核心思想 是 通过大量的文本数据来学习每个词的向量表示 , 使得 语义相似 的 单词 或 汉字 在向量空间中彼此接近 ;
韩曙亮
2024/08/20
1.6K0
【AI 大模型】RAG 检索增强生成 ③ ( 文本向量 | Word2Vec 词汇映射向量空间模型 - 算法原理、训练步骤、应用场景、实现细节 | Python 代码示例 )
PyTorch实现Word2Vec
其中两个必选参数num_embeddings表示单词的总数目,embedding_dim表示每个单词需要用什么维度的向量表示。而nn.Embedding权重的维度也是(num_embeddings, embedding_dim),默认是随机初始化的
mathor
2020/04/14
4.5K1
Word2vec原理浅析及tensorflow实现
词向量的重要意义在于将自然语言转换成了计算机能够理解的向量。相对于词袋模型、TF-IDF等模型,词向量能抓住词的上下文、语义,衡量词与词的相似性,在文本分类、情感分析等许多自然语言处理领域有重要作用。
用户1332428
2018/07/30
6380
Word2vec原理浅析及tensorflow实现
教程 | 利用AllenNLP,百行Python代码训练情感分类器
情感分析是一种流行的文本分析技术,用来对文本中的主观信息进行自动识别和分类。它被广泛用于量化观点、情感等通常以非结构化方式记录的信息,而这些信息也因此很难用其他方式量化。情感分析技术可被用于多种文本资源,例如调查报告、评论、社交媒体上的帖子等。
机器之心
2018/12/05
1.4K0
Transformer注解及PyTorch实现(下)
我们使用标准WMT 2014英语-德语数据集进行了训练,该数据集包含大约450万个句子对。使用字节对的编码方法对句子进行编码,该编码具有大约37000个词的共享源-目标词汇表。对于英语-法语,我们使用了WMT 2014 英语-法语数据集,该数据集由36M个句子组成,并将词分成32000个词片(Word-piece)的词汇表。
YoungTimes
2022/04/28
9770
Transformer注解及PyTorch实现(下)
无所不能的Embedding 1 - Word2vec模型详解&代码实现
word2vec是google 2013年提出的,从大规模语料中训练词向量的模型,在许多场景中都有应用,信息提取相似度计算等等。也是从word2vec开始,embedding在各个领域的应用开始流行,所以拿word2vec来作为开篇再合适不过了。本文希望可以较全面的给出Word2vec从模型结构概述,推导,训练,和基于tf.estimator实现的具体细节。完整代码戳这里 https://github.com/DSXiangLi/Embedding
风雨中的小七
2020/08/11
1.9K0
无所不能的Embedding 1 - Word2vec模型详解&代码实现
【入门】PyTorch文本分类
文本分类是NLP领域的较为容易的入门问题,本文记录文本分类任务的基本流程,大部分操作使用了torch和torchtext两个库。
zenRRan
2020/02/18
1.9K0
从锅炉工到AI专家(9)
无监督学习 前面已经说过了无监督学习的概念。无监督学习在实际的工作中应用还是比较多见的。 从典型的应用上说,监督学习比较多用在“分类”上,利用给定的数据,做出一个决策,这个决策在有限的给定可能性中选择其中一种。各类识别、自动驾驶等都属于这一类。 无监督学习则是“聚类”,算法自行寻找输入数据集的规律,并把它们按照规律分别组合,同样特征的放到一个类群。像自然语言理解、推荐算法、数据画像等,都属于这类(实际实现中还是比较多用半监督学习,但最早概念的导入还是属于无监督学习)。 无监督学习的确是没有人工的标注,
俺踏月色而来
2018/06/20
6350
AI大模型之路 第三篇:从零实现词嵌入模型,加深理解!
今天我们研究「AI大模型第三篇」:词维度预测,很多读者听过词嵌入,这篇文章解答下面问题:
double
2024/04/25
6710
AI大模型之路 第三篇:从零实现词嵌入模型,加深理解!
cs224d-第二课-word2vec
首先我想说下为什么会去学习cs224d,原先我一直是做工程的,做了大概3年,产品做了好多,但是大多不幸夭折了,上线没多久就下线,最后实在是经受不住心灵的折磨,转行想做大数据,机器学习的,前不久自己学习完了Udacity的深度学习,课程挺好,但是在实际工作中,发现课程中的数据都是给你准备好的,实践中哪来这么多好的数据,只能自己去通过各种手段搞数据,苦不堪言。在找数据的过程中,发现做多的数据还是文本数据,不懂个nlp怎么处理呢,于是就来学习cs224d这门课程,希望在学习过程中能快速将课程所学应用到工作中,fighting!
zhuanxu
2018/08/23
7150
cs224d-第二课-word2vec
使用PyTorch建立你的第一个文本分类模型
我总是使用最先进的架构来在一些比赛提交模型结果。得益于PyTorch、Keras和TensorFlow等深度学习框架,实现最先进的体系结构变得非常容易。这些框架提供了一种简单的方法来实现复杂的模型体系结构和算法,而只需要很少的概念知识和代码技能。简而言之,它们是数据科学社区的一座金矿!
磐创AI
2020/03/04
2.2K0
3.词向量word2vec(图学习参考资料1)
项目链接: https://aistudio.baidu.com/aistudio/projectdetail/5009409
汀丶人工智能
2022/11/20
5120
pytorch实战---IMDB情感分析
在代码中设置日志的作用是记录程序的运行状态、调试信息和重要事件,以便在开发和生产环境中更轻松地诊断问题和了解程序的行为。设置日志有以下作用:
小馒头学Python
2024/04/28
7290
pytorch实战---IMDB情感分析
基于机器学习的情感分析方法
上次课程我们介绍了基于情感词典的情感分析方法,本节课我们尝试基于机器学习的情感分析方法,以电影中文文本情感分析为例,最常见的就是对电影评论数据进行情感分类,如积极情感(positive)、消极情感(negative)等。而目前可以用来处理这类问题的机器学习模型有很多,如朴素贝叶斯、逻辑回归、SVM、CNN等等,本文采用深度学习TextCNN模型进行电影评论数据的情感分类,下面看其具体实现的过程。
用户7569543
2021/02/02
4.5K1
DL杂记:word2vec之TF-IDF、共轭矩阵、cbow、skip-gram
版权声明:本文为博主原创文章,未经博主允许不得转载。有问题可以加微信:lp9628(注明CSDN)。 https://blog.csdn.net/u014365862/article/details/87800246
MachineLP
2019/05/26
8160
图解一致性哈希算法,全网(小区局域网)最通俗易懂
word2vec是google 2013年提出的,从大规模语料中训练词向量的模型,在许多场景中都有应用,信息提取相似度计算等等。也是从word2vec开始,embedding在各个领域的应用开始流行,所以拿word2vec来作为开篇再合适不过了。本文希望可以较全面的给出Word2vec从模型结构概述,推导,训练,和基于tf.estimator实现的具体细节。完整代码戳这里https://github.com/DSXiangLi/Embedding
不会飞的小鸟
2020/08/02
4610
循环神经网络——上篇【深度学习】【PyTorch】【d2l】
序列模型主要用于处理具有时序结构的数据, **时序数据是连续的,**随着时间的推移,如电影评分、电影奖项、电影导演演员等。
来杯Sherry
2023/09/19
4630
循环神经网络——上篇【深度学习】【PyTorch】【d2l】
极简使用︱Gemsim-FastText 词向量训练以及OOV(out-of-word)问题有效解决
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/83041424
悟乙己
2019/05/26
3.7K0
推荐阅读
相关推荐
Tensorflow实现word2vec
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档