首页
关于
Search
1
图神经网络
45 阅读
2
java期末速成
18 阅读
3
CLIP
17 阅读
4
Attention2Transformer
17 阅读
5
MySQL
15 阅读
默认分类
AI
课内
技能
Search
标签搜索
AI
CS
Tools
paper
DeepLearning
python
DATA
GNN
Transformer
晨旭不想写程序
累计撰写
16
篇文章
累计收到
2
条评论
首页
栏目
默认分类
AI
课内
技能
页面
关于
搜索到
16
篇与
的结果
2024-08-24
暂无简介
2024年08月24日
2 阅读
0 评论
1 点赞
2024-06-02
MySQL
MySQL功能实现对于大量数据的储存增删改查速度更快对于程序的对接比较友好数据库的本质也是文件数据库:用来管理数据表的数据表:用来储存具体的数据的字段:是用来储存一类信息的一列记录:是用来描述一个人或事物的详细信息的一行主键:用来表示唯一一行记录的特殊字段(数值存在且唯一)关系型数据库:表和表之间可以发生关联的数据库基础语法DDL: 数据定义语言,用来定义数据库对象(数据库、表、字段)DML: 数据操作语言,用来对数据库表中的数据进行增删改DQL: 数据查询语言,用来查询数据库中表的记录DCL: 数据控制语言,用来创建数据库用户、控制数据库的控制权限DDL(数据定义语言)数据库操作#查询所有数据库 SHOW DATABASES; #查询当前数据库 SELECT DATABASE(); #创建数据库 CREATE DATABASE [ IF NOT EXISTS ] 数据库名 [ DEFAULT CHARSET 字符集] [COLLATE 排序规则 ]; #删除数据库 DROP DATABASE [ IF EXISTS ] 数据库名; #使用数据库 USE 数据库名;注意:推荐字符集使用utf8mb4字符集表操作#查询当前数据库所有表: SHOW TABLES; #查询表结构: #DESC 表名; #查询指定表的建表语句: SHOW CREATE TABLE 表名; #创建表: CREATE TABLE 表名( 字段1 字段1类型 [COMMENT 字段1注释], 字段2 字段2类型 [COMMENT 字段2注释], 字段3 字段3类型 [COMMENT 字段3注释], ... 字段n 字段n类型 [COMMENT 字段n注释] )[ COMMENT 表注释 ]; #添加字段: ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束]; #修改数据类型: ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); #修改字段名和字段类型: ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]; #删除字段: ALTER TABLE 表名 DROP 字段名; #修改表名: ALTER TABLE 表名 RENAME TO 新表名 #删除表: DROP TABLE [IF EXISTS] 表名; #删除表,并重新创建该表: TRUNCATE TABLE 表名;DML(数据操作语言)#向指定字段添加数据: INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...); #向全部字段添加数据: INSERT INTO 表名 VALUES (值1, 值2, ...); #批量添加数据: INSERT INTO 表名 (字段名1, 字段名2, ...) VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...); INSERT INTO 表名 VALUES (值1, 值2, ...), (值1, 值2, ...), (值1, 值2, ...); #修改数据: UPDATE 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... [ WHERE 条件 ]; #删除数据: DELETE FROM 表名 [ WHERE 条件 ];DQL(数据查询语言)语法SELECT 字段列表 FROM 表名字段 WHERE 条件列表 GROUP BY 分组字段列表 HAVING 分组后的条件列表 ORDER BY 排序字段列表 LIMIT 分页参数#查询多个字段: SELECT 字段1, 字段2, 字段3, ... FROM 表名; SELECT * FROM 表名; #设置别名: SELECT 字段1 [ AS 别名1 ], 字段2 [ AS 别名2 ], 字段3 [ AS 别名3 ], ... FROM 表名; SELECT 字段1 [ 别名1 ], 字段2 [ 别名2 ], 字段3 [ 别名3 ], ... FROM 表名; #去除重复记录: SELECT DISTINCT 字段列表 FROM 表名;特殊查询#条件查询 SELECT 字段列表 FROM 表名 WHERE 条件列表; #聚合查询 SELECT 聚合函数(字段列表) FROM 表名; #分组查询 SELECT 字段列表 FROM 表名 [ WHERE 条件 ] GROUP BY 分组字段名 [ HAVING 分组后的过滤条件 ]; #排序查询 SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2; #分页查询 SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询记录数;聚合函数<br/>函数功能count统计数量max最大值min最小值avg平均值sum求和排序方式ASC: 升序(默认)DESC: 降序注意事项起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数分页查询是数据库的方言,不同数据库有不同实现,MySQL是LIMIT如果查询的是第一页数据,起始索引可以省略,直接简写 LIMIT 10DQL执行顺序FROM -> WHERE -> GROUP BY -> SELECT -> ORDER BY -> LIMITDCL(数据控制语言)#查询用户: USE mysql; SELECT * FROM user; #创建用户: CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码'; #修改用户密码: ALTER USER '用户名'@'主机名' IDENTIFIED WITH mysql_native_password BY '新密码'; #删除用户: DROP USER '用户名'@'主机名'; #查询权限: SHOW GRANTS FOR '用户名'@'主机名'; #授予权限: GRANT 权限列表 ON 数据库名.表名 TO '用户名'@'主机名'; #撤销权限: REVOKE 权限列表 ON 数据库名.表名 FROM '用户名'@'主机名';常用权限:权限说明ALL, ALL PRIVILEGES所有权限SELECT查询数据INSERT插入数据UPDATE修改数据DELETE删除数据ALTER修改表DROP删除数据库/表/视图CREATE创建数据库/表
2024年06月02日
15 阅读
0 评论
0 点赞
2024-06-02
数据解析
数据解析在最近学习中我们学习了两种解析方法,分别是正则表达式的re解析与BeautifulSoup解析器的使用一、正则表达式正则表达式是用来避免重复工作,处理有规律信息的一个有力工具import re text = "Hi, I am Shirley Hilton. I am his wife." m = re.findall(r"hi", text) if m: print (m) else: print ('not match')这是一个小实验,通过它来看,我们不难看出这是在通过某种方法寻找"Hi, I am Shirley Hilton. I am his wife."这段话中的"hi"通过这个我们发现会有两个结果,都是hi,分别来自于Shirly与his俩单词,由此我们看出,正则表达式是严格的,区分大小写的,Hi并不满足要求。当然,不仅仅有这样的查找,也可以仅仅找部分的,比如只匹配“Hi”,在这段话中只想要计数一次,那么我们可以采用"\bHi\b"的查找对象,这样就能仅仅匹配单独的Hi啦。“\b”在正则表达式中表示单词的开头或结尾,空格、标点、换行都算是单词的分割。而“\b”自身又不会匹配任何字符,它代表的只是一个位置。所以单词前后的空格标点之类不会出现在结果里。然后[]符号的作用也很大,它的作用是表示满足括号中任一字符,例如我们想要Hi也想要hi,就可以[Hh]ir接下来继续解释这个小试验中的内容,在语句传参时的r的含义,为什么要加r?<br/>r,是raw的意思,它表示对字符串不进行转义。例如:>>> print ("\bhi") hi >>> print (r"\bhi") \bhirere是python里的正则表达式模块。findall是其中一个方法,用来按照提供的正则表达式,去匹配文本中的所有符合条件的字符串。返回结果是一个包含所有匹配的list。特殊字符这里介绍.除换行符以外的任意字符\S不是空白符的任意字符*表示前面的字符可以重复任意多次(包括0次)+表示前面的字符可以重复任意多次(不包括0次){}表示指定长度[][]内任意字符\w匹配字母或数字或下划线或汉字 \d匹配数字\s匹配空白符^ 匹配字符串的开始$匹配字符串的结束?重复零次或一次(懒惰匹配){n,}重复n次或更多次{n,m}重复n到m次很容易猜想到,如\s\S这样大小写的区分就是正反的区别,由此推出各个对应的相反,此外,[^]内通过加^就代表除此符号外任意字符.*贪婪匹配/*?懒惰匹配二、BeautifulSoup解析器[1]简介Beautiful Soup是Python的一个库,能够从网页抓取数据提供了一些函数用来处理数据,用很少的代码就能够写出来一个完整的程序。[2]特点Beautiful Soup能够自动的将文档转换为utf-8编码格式,能够更为方便的进行使用使用[1]创建对象要想创建一个Beautiful Soup对象,首先要导入库bs4,lxml,requests。这里使用一个实例html = """ <html><head><title>The Dormouse's story</title></head> <body> <p class="title" name="dromouse"><b>The Dormouse's story</b></p> <p class="story">Once upon a time there were three little sisters; and their names were <a href="http://example.com/elsie" class="sister" id="link1"><!-- Elsie --></a>, <a href="http://example.com/lacie" class="sister" id="link2">Lacie</a> and <a href="http://example.com/tillie" class="sister" id="link3">Tillie</a>; and they lived at the bottom of a well.</p> <p class="story">...</p> """ soup = BeautifulSoup(html,'lxml') #创建 beautifulsoup 对象同时也可以使用HTML文件直接创建对象soup1 = BeautifulSoup(open('index.html')) Beautiful Soup将复杂HTML文档转换成一个复杂的树形结构,每个节点都是Python对象,所有对象可以归纳为4种:TagNavigableStringBeautifulSoupComment1>TagTag就是 HTML 中的一个个标签通过这种方法就可以直接访问标签print (soup.title) print (soup.head) print (soup.a) print (soup.p) print (type(soup.a))Tag有两个重要的属性,name与attrs并且可以对这些属性和内容进行修改2>NavigableString得到了标签的内容用 .string 即可获取标签内部的文字例如print(soup.a.string)3>BeautifulSoupBeautifulSoup 对象表示的是一个文档的全部内容.大部分时候,可以把它当作 Tag 对象,是一个特殊的 Tag,我们可以分别获取它的类型,名称:4>Comment[2]遍历文档树tag 的 .contents 属性可以将tag的子节点以列表的方式输出.children属性生成的是一个列表生成器对象,可以通过遍历获得其中的内容.descendants 属性可以对所有tag的子孙节点进行递归循环,和 children类似,要获取其中的内容,我们需要对其进行遍历还有许多关联选择方法[3]CSS选择器CSS的使用只需要调用select方法结合CSS选择器语法就可以实现元素定位格式:soup.select()1>id选择器每段节点都有专属的id,通过id就可以匹配相应的节点,使用#加id就可以实现定位2>类选择器类选择器用.来定位元素例如The Dormouse's story中的title就是类名3>标签选择器直接使用标签来定位即可例如p在定位时可以多种定位方法混合使用,达到更为理想的效果。[4]CSS高级用法1>嵌套选择因为其仍旧是一个tag对象,所以可以使用嵌套选择2>属性获取使用attrs属性3>文本获取使用string与strings获取文本信息[5]方法选择器1>find_all()方法soup传入整个HTML文档然后进行全文搜索find_all(name,attrs,recursive,text,**kwargs)name参数就是查找名字为name的节点,返回tag对象,这个传入的参数可以是字符串,可以是列表,正则,还可以是True(以此为参数可以获取所有的标签)attrs参数是查询含有接受的属性值的标签,参数形式为字典类型例如{id:'link1'}kwargs参数是接收常用的属性参数的,如id和class,参数形式是变量赋值的形式,例如(id='link1')<br/>class 是关键字,使用时应该加下划线即class_=……text参数是通过查询含有接受的文本的标签来查找的,参数形式是字符串limit参数是用于限制返回结果的数量的参数,参数形式是整数,顾名思义recursive参数是决定是否获取子孙节点的参数,参数形式是布尔值,默认是True2>find方法返回值是第一个符合条件的元素,除limit参数不存在外,其余参数都与find_all方法一致
2024年06月02日
13 阅读
0 评论
0 点赞
2024-06-02
AutoML
autoML学习使用工具auto_ml它主要将机器学习中所有耗时过程自动化,如数据预处理、最佳算法选择、超参数调整等,这样可节约大量时间在建立机器学习模型过程中。进行自动机器学习使用的库为pycaretpycaret——》开源机器学习库不好用从数据准备到模型部署 一行代码实现可以帮助执行端到端机器学习试验 无论是计算缺失值 编码分类数据 实施特征工程 超参数调整还是构建集成模型 都非常方便使用前新建虚拟环境:scikit-learn==0.23.2pycaret跟auto-ts有冲突根据要解决的问题类型,首先需要导入模块。在 PyCaret 的第一个版本中,有 6 个不同的模块可用 ---> 回归、分类、聚类、自然语言处理 (NLP)、异常检测和关联挖掘规则。我们这次要预测新增用户,所以是一个分类问题,我们引入分类模块# import the classification module from pycaret import classification # setup the environment classification_setup = classification.setup( data= data_classification, target='Personal Loan')设置更多自定义参数data_amend = exp_mclf101 = setup( data= data_classification, target='Personal Loan', train_size = 0.80, ignore_features = ["session_id",...], numeric_features =["Age",...], combine_rare_levels= False, rare_level_threshold=0.1, categorical_imputation = 'mode', imputation_type ='simple', feature_interaction = True, feature_ratio= True, interaction_threshold=0.01, session_id=123, fold_shuffle=True, use_gpu=True, fix_imbalance=True, remove_outliers=False,normalize = True, transformation = False, transformation_method='quantile', feature_selection= True, feature_selection_threshold = 0.8, feature_selection_method='boruta', remove_multicollinearity = True, multicollinearity_threshold=0.8 normalize_method = 'robust')在我们使用过程中只需要进行调用函数,函数值接受一个参数,也就是模型缩写这个表格包含了模型缩写字符串最后,我们将对陌生数据进行预测。为此,我们只需要传递将用于预测的数据集的模型。注意的是,确保它与之前设置环境时提供的格式相同。PyCaret 构建了所有步骤的管道,并将预测数据传递到管道中并输出结果。通过拜读群内大佬的数据处理过程 得到以下技巧分组聚合 将x1到x8的数据进行分组聚合 并计算每个分组对于target的均值猜想 有些特征数值比较大 是否使用正则化进行时间序列上的处理 将其转化成月 日 小时 分钟 以及是否为周末 一年中的第几周时间特征实际上并不好用依然使用决策树进行训练这样的训练方法使得分数进行了一定的上升,但依旧存在召回率低的问题
2024年06月02日
10 阅读
1 评论
0 点赞
2024-06-02
Attention2Transformer
注意力机制什么是注意力首先,心理学上,作为动物,想要在复杂环境下关注到需要关注的事物,机制是根据随意线索和不随意线索选择注意点随意与不随意实际上是遂意与不遂意,也就是是否受控例如这里的在环境中看到红色杯子,是因为杯子颜色鲜艳,会让人第一眼看到,这是不需要遂意的,而想读书带着个人意愿,是遂意的在搜索注意力机制像之前学习过的卷积 全连接 池化层 都是只考虑不随意线索,更倾向于关注有特点的事物注意力机制则显示的考虑随意线索随意线索被称之为查询(query) ——》要求,想法每个输入是一个值(value)和不随意线索(key)的对 ——》 环境,也就是存放一堆事物的场景通过注意力池化层来有偏向性的选择选择某些输入 ——》 根据想法,根据在环境中为事物的不同价值选择观察事物查询,键和值在此之前提出QKV的概念所谓Q即为query,被称为查询,即自主性提示,给定任何查询,注意力机制通过注意力汇聚将选择引导至感官输入,这些感官输入被称为V,即value,每个值都与一个键K,即key匹配,可以想象为非自主性提示。非参注意力汇聚$$ f(x)=\sum_{i=1}^{n}{\frac{K(x-x_{i})}{\sum_{i=1}^{n}{K(x-x_{j})}}}y_{i} $$其中$K()$的作用就是衡量$X$与$X_i$之间关系的一个函数$X$就是所谓的Q,是自主性提示而$X_i$是所谓的K,与V一一对应,是非自主性提示而他们的差值最小二乘,衡量他们的关系,此时二者差距越小,越接近,则此$y_i$所对应的权重就越大,即注意力分配越多,由此就得到了对应的汇聚函数$$ K(u)=\frac{1}{\sqrt{2\pi}}\,\mathrm{Exp}(-\frac{u^{2}}{2}) $$$$ \begin{array}{c}{{f(x)=\sum_{i=1}^{n}\frac{\exp\left(-\frac{1}{2}(x-x_{i})^{2}\right)}{\sum_{j=1}^{n}\exp\left(-\frac{1}{2}(x-x_{j})^{2}\right)}y_{i}}}\\ {{\displaystyle=\sum_{i=1}^{n}\mathrm{softmax}\left(-\frac{1}{2}(x-x_{i})^{2}\right)y_{i}}}\end{array} $$这里实际上就是做了一个softmax操作有参注意力汇聚在此基础上引入可以学习的$w$ ,就实现了有参数的注意力汇聚f(x)= $ \sum _ {i=1}^ {n} $ soft $ \max $ (- $ \frac {1}{2} $ $ ((x-x_ {i})w)^ {2} $注意力评分上文所示高斯核其实就是注意力评分函数,进行运算后得到与键对应的值的概率分布,即注意力权重加性注意力一般来说,当查询和键是不同长度的向量时,可以使用加性注意力作为评分函数k $ \in $ $ R^ {h\times k} $ , $ W_ {q} $ $ \in $ $ R^ {h\times q} $ ,v $ \in $ $ R^ {h} $ a(k,q)= $ v^ {T} $ $ \tanh $ ( $ W_ {k} $ k+ $ W_ {q} $ q)等价于将key与value合并起来后放入到一个隐藏大小为$h$,输出大小为1的单隐藏层MLP缩放点积注意力直接使用点积可以得到计算效率很高的评分函数,但是点积操作需要K与Q拥有相同的长度d,此时如果将a(q, $ k_ {i} $ )= $ \langle $ q, $ k_ {i} $ $\rangle$ /$\sqrt {d} $ 除一个根号d的目的是为了消除长度的影响使用注意力机制的seq2seq之前提到使用两个循环神经网络的编码器解码器结构实现了seq2seq的学习,实现 机器翻译的功能循环神经网络编码器将可变序列转换为固定形状的上下文变量,然后循环神经网络解码器根据生成的词元和上下文变量按词元生成输出序列词元然而不是所有的输入词元 都对 解码某个词元 都有用,在每个解码步骤中仍使用编码相同的上下文变量在此时attention的加入就能改变这一点,科威助力模型Bahdanau,在预测词元时,如果不是所有输入词元都相关,模型将仅对齐输入序列中与当前预测相关的部分,这是通过将上下文变量视为注意力集中的输出来实现的模型图:上图就是一个带此结构的编码解码器模型图中,sources经过embedding后进入RNN形成 编码器,编码器对于每次词的输出作为key和 value(它们是同样的)解码器RNN对上一个词的输出是queryattention的输出与下一个词的词嵌入合并后进入下一次的RNN自注意力机制所谓自注意力就是KVQ都是来自同一个输入所得注:与RNN不同,自注意力机制拥有很高的并行度,复杂度较高位置编码自注意力并没有记录位置信息,所以要用到位置编码,位置编码将位置信息注入到输入里位置编码用于表示绝对或者相对的位置信息,可以是设定好的固定参数,也可以是由学习所得如下就是一种固定好的正余弦函数表示的固定位置编码假设长度为n的序列是n×d的shpe的X,那么使用n×d的shape的位置编码矩阵P来输出X+P作为自编码输入P $ \in $ $ R^ {n\times d} $ : $ p_ {i,2j} $ = $ \sin $ ( $ \frac {i}{10000^ {2j/d}} $ ), $ p_ {i,2j+1} $ = $ \cos $ ( $ \frac {i}{10000^ {2j/d}} $ )如图(比较抽象,花了很久理解)首先横坐标是不同位置索引的数据,不同的函数图像是设定好的,比如可以设定256个col,这个超参数的大小就蕴含了输出向量可以获取的位置信息,这样就保证了不同位置的输出绝对不一样,例如row为0时的输出为[1,0,1,0,1,0,1,0...],不可能存在第二个col输出与此相同的情况,而col的个数代表了蕴含的信息量,越多可获取就越多位置编码与二进制编码类似的效果二进制表示例:使用三位二进制数表示八个数字的信息如图所示,每一个位置,也就是横着拿出来一条,绝对找不到与之相等的一条了,这是不可能的transformertransformer架构transformer的编码器是由多个相同的层叠加而成的,每个层都有两个子层第一个子层是多头自注意力汇聚,第二个子层是基于位置的前馈网络收到残差网络的启发,每个子层都采用了残差连接transformer解码器也是由多个相同的层叠加而成的,并且层中使用了残差连接和层规范化。除了编码器中描述的两个子层之外,解码器还在这两个子层中插入了第三个子层,成为编码器-解码器注意力层,多头注意力多头注意力是一种特殊的使用自注意力的结构是说同一k,v,q,希望抽取不同的信息,例如短距离关系和长距离关系多头注意力使用h个独立的注意力池化,合并各个头输出得到最后的输出有掩码的多头注意力训练解码器对于序列中一个元素输出时,不应该考虑该元素之后的元素,可以通过掩码来实现,也就是计算$X_i$输出时,假装当前序列长度为$i$基于位置的前馈网络也就是图中的逐位前馈网络实际上就是全连接,batch_size,n—》序列长度,dimension由于n的长度不是固定的将输入形状由(b,n,d)变换成(bn,d)作用两个全连接层输出形状由(bn,d)变换回(b,n,d)等价于两层核窗口为1的一维卷积层层归一化self attention加性注意力一般来说,当查询和键是不同长度的向量时,可以使用加性注意力作为评分函数k $ \in $ $ R^ {h\times k} $ , $ W_ {q} $ $ \in $ $ R^ {h\times q} $ ,v $ \in $ $ R^ {h} $ a(k,q)= $ v^ {T} $ $ \tanh $ ( $ W_ {k} $ k+ $ W_ {q} $ q)等价于将key与value合并起来后放入到一个隐藏大小为$h$,输出大小为1的单隐藏层MLP缩放点积注意力直接使用点积可以得到计算效率很高的评分函数,但是点积操作需要K与Q拥有相同的长度d,此时如果将a(q, $ k_ {i} $ )= $ \langle $ q, $ k_ {i} $ $\rangle$ /$\sqrt {d} $ 除一个根号d的目的是为了消除长度的影响现在使用的都是点乘attention
2024年06月02日
17 阅读
0 评论
0 点赞
1
2
...
4