LSTM
LSTM原理
一、基础介绍
1.1 神经网络模型
简单来说,常见的神经网络模型结构有前馈神经网络(DNN)、RNN(常用于文本
/ 时间系列任务)、CNN(常用于图像任务)等等。具体可以看之前文章:一文概览神经网络模型。
前馈神经网络是神经网络模型中最为常见的,信息从输入层开始输入,每层的神经元接收前一级输入,并输出到下一级,直至输出层。整个网络信息输入传输中无反馈(循环)。即任何层的输出都不会影响同级层,可用一个有向无环图表示。
1.2 RNN 介绍
循环神经网络(RNN)是基于序列数据(如语言、语音、时间序列)的递归性质而设计的,是一种反馈类型的神经网络,它专门用于处理序列数据,如逐字生成文本或预测时间序列数据(例如股票价格、诗歌生成)。
RNN和全连接神经网络的本质差异在于“输入是带有反馈信息的”,RNN除了接受每一步的输入x(t)
,同时还有输入上一步的历史反馈信息——隐藏状态h (t-1)
,也就是当前时刻的隐藏状态h(t) 或决策输出O(t) 由当前时刻的输入 x(t)
和上一时刻的隐藏状态h (t-1)
共同决定。从某种程度,RNN和大脑的决策很像,大脑接受当前时刻感 ...
航空公司客户价值聚类分析
航空公司客户价值聚类分析
特征工程
K-means聚类
RFM模型
DBSCAN算法
描述
信息时代的来临使得企业营销焦点从产品中心转变成客户中心。具体地,对不同的客户进行分类管理,给予不同类型的客户制定优化的个性化服务方案,采取不同的营销策略。将有限的营销资源集中于高价值的客户,实现企业利润最大化
借助航空公司数据,对客户进行分类
对不同类别的客户进行特征分析,比较不同类别客户的价值
对不同价值的客户类别进行个性化服务,制定相应的营销策略
思路
image.png
数据
数据集中字段含义
数据预处理
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import datetime
import sklearn.preprocessing
import sklearn.cluster
air_data_path = "./dataset/air_data.csv"
air_data = pd.read_csv(air_data_path)
air_data. ...
基于seq2seq+attention实现文本摘要
基于seq2seq+attention实现文本摘要
任务描述:
自动摘要是指给出一段文本,我们从中提取出要点,然后再形成一个短的概括性的文本
image.png
https://github.com/pytorch/text/releases/tag/v0.9.0-rc5
import torch
import torch.nn as nn
import torch.optim as optim
import torch.nn.functional as F
import spacy
from torchtext.legacy.datasets import Multi30k
from torchtext.legacy.data import Field,Iterator,BucketIterator,TabularDataset
import pandas as pd
import numpy as np
import random
import math
import time
# 全局初始化配置参数。 固定随机种子, 使得每次运行的结果相同
SEED = 22 ...
NLP-Bert语义情感分类
评论情感分类数据处理
# 评论情感分类数据处理
# labels: 0负面、1中性、2正面
class CommentProcessor(DataProcessor):
def get_train_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir,"train.tsv")),"train"
)
def get_dev_examples(self, data_dir):
return self._create_examples(
self._read_tsv(os.path.join(data_dir, "dev.tsv")), "dev"
)
def get_test_examples(self, data_dir):
re ...
案例-基于关联规则算法实现电影推荐系统
基于关联规则算法实现电影推荐系统
image.png
利用数据挖掘算法中的Apriori(关联规则)算法来实现一个电影推荐系统
加载数据
数据预处理
生成频繁项集、关联规则
通过关联规则生成电影推荐的列表
Apriori算法
案例: 啤酒与尿布:
沃尔玛超市在分析销售记录时,发现了啤酒与尿布经常一起被购买,于是他们调整了货架将两者放在了一起,结果真的提升了啤酒的销量。
原因解释: 爸爸在给宝宝买尿布的时候,会顺便给自己买点啤酒?
概述:
Apriori算法是一种最有影响力的挖掘布尔关联规则的频繁项集的算法,其命名Apriori源于算法使用了频繁项集性质的先验(Prior)知识。
接下来我们将以超市订单的例子理解关联分析相关的重要概念:
Support(支持度)、Confidence(置信度)、Lift(提升度)。
image.png
Support(支持度):指某事件出现的概率,在本例中即指某个商品组合出现的次数占总次数的比例。
例:Support('Bread') = 4/5 = 0.8 Support('Milk') = 4/5 = 0.8
Support ...
案例-使用决策树预测隐性眼镜类型
案例-使用决策树预测隐性眼镜类型
收集数据:提供的文本文件
准备数据:解析tab键分割的数据
分析数据:快速检查数据
训练算法:
测试算法:编写测试函数 验证决策树可以正确分类给定的数据实例
使用算法:存储树的数据结构,以便下次使用
from math import log
import operator
def calcShannonEnt(dataSet):
numEntries = len(dataSet)
# 为所有可能分类创建字典
labelCounts= {}
for featVec in dataSet:
currentLabel = featVec[-1]
if currentLabel not in labelCounts.keys():
labelCounts[currentLabel] = 0
labelCounts[currentLabel] += 1
shannonEnt = 0.0
for key in labelC ...
决策树demo
决策树
决策树的一个重要任务是为了数据中所蕴含的知识信息
决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,在这些机器根据数据集创建规则时,就是机器学习的过程
k-近邻算法可以完成很多分类任务,但是它最大的缺点就是无法给出数据的内在含义,决策树的主要优势就在于数据形式非常容易理解
决策数的构造
优点:计算复杂度不高,输出结果易于理解,对中间值对缺失不敏感,可处理不相关特征数据
缺点:可能会产生过度匹配的问题
适用数据类型:数值型和 标称型
构建决策树的第一个问题:当前数据集上哪个特征在划分数据分类时起决定性作用
为了找到决定性的特征,划分出最好的结果,我们必须评估每个特征。
完成测试之后,原始数据集就被划分为几个数据子集
这些数据子集会分布在第一个决策点的所有分支上。如果某个分支下的数据属于同一类型,则当前条件已经正确地划分数据分类,
无需进一步对数据集进行分割。
如果数据子集内的数据不属于同一类型,则需要重复划分数据子集的过程
思路 检测数据集中的每个子项是否属于同一分类: If so
return 类标签; Else 寻找划分数据集的最好特征 划分数据集 创建分支 ...
机器学习实战-笔记3-决策树
决策树的一个重要任务是为了数据中所蕴含的知识信息
决策树可以使用不熟悉的数据集合,并从中提取出一系列规则,在这些机器根据数据集创建规则时,就是机器学习的过程
k-近邻算法可以完成很多分类任务,但是它最大的缺点就是无法给出数据的内在含义,决策树的主要优势就在于数据形式非常容易理解
决策数的构造
优点:计算复杂度不高,输出结果易于理解,对中间值对缺失不敏感,可处理不相关特征数据
缺点:可能会产生过度匹配的问题
适用数据类型:数值型和 标称型
构建决策树的第一个问题:当前数据集上哪个特征在划分数据分类时起决定性作用
- 为了找到决定性的特征,划分出最好的结果,我们必须评估每个特征。 -
完成测试之后,原始数据集就被划分为几个数据子集 -
这些数据子集会分布在第一个决策点的所有分支上。如果某个分支下的数据属于同一类型,则当前条件已经正确地划分数据分类,
无需进一步对数据集进行分割。 -
如果数据子集内的数据不属于同一类型,则需要重复划分数据子集的过程
思路 检测数据集中的每个子项是否属于同一分类: If so
return 类标签; Else 寻找划分数据集的最好特征 划分数据集 创建 ...
案例-k-近邻-改进约会网站的配对效果
思路
收集数据:提供文本数据
准备数据:解析文本数据
分析数据:使用matplotlib 二维扩散图
训练算法:不适用于k-近邻
测试算法:切分测试样本;
测试样本是已经完成分类的数据,如果预测分类与实际分类不同,则标记为错误
使用算法:程序执行,输入一些特征数据来判断是否为喜欢的类型
三种类型:不喜欢的、一般的、喜欢的
准备数据
import numpy as np
import matplotlib.pyplot as plt
import operator
np.zeros((1000,3)).shape
(1000, 3)
def file2matrix(filename):
with open (filename,'r') as f:
arrayOLines = f.readlines()
# print(arrayLines)
numberOflines= len(arrayOLines)
# print(numberOflines)
returnMat = np ...
案例-k-近邻-手写字识别系统
收集数据:提供文本文件
准备数据:编写函数classify0(),
将图像格式转换为分类器使用的list格式
分析数据:检查数据
训练算法:不适用于k-近邻算法
测试算法:编写函数切分测试样本;
测试样本是已经完成分类的数据,如果预测分类与实际分类不同,则标记为错误
使用算法:
Numpy中有两个常用数据类型,数组(array/ndarray)、矩阵(matrix)
matrix是array的特殊形式,matrix只能表示2维的数据,而array可以表示任意维度数据,matrix相当于二维数组。
当matrix的某一维的维度为1时,即可称为向量(m,1)是列向量,(1,n)是行向量
import numpy as np
import os
import operator
准备数据:将图像转换为测试向量
# 将图像处理为向量
def img2vector(filename):
returnVect = np.zeros((1,1024))
# print(returnVect)
with open(filename,'r') as f:
...