/images/avatar.png

vllbc

布尔检索

信息检索就是从大规模非结构化数据(通常是文本)的集合(通常保存在计算机上)中找出满足用户信息需求的资料(通常是文档)的过程。

布尔索引顾名思义就是利用布尔操作对文档进行索引,对于检索任务来说,要求的就是对于一个query,检索出与其相关的文档,首先肯定的是文档中要出现query中的词项才有可能有关,易得的一个想法就是建立词项-文档关联矩阵,行向量表示词项在各文档中是否出现,列向量表示某文档中各词项是否出现,得到了这个矩阵,对于query,就可以根据布尔检索得到对应的doc。这是一个很容易想到的方法。

GPT

GPT

预训练(从左到右的 Transformer 语言模型)

GPT 是一种基于 Transformer 的从左到右的语言模型。该架构是一个 12 层的 Transformer 解码器(没有解码器-编码器)。 ## 模型架构

就是12层的transformer-decoder。其中只使用了transformer模型中的decoder部分,并且把decoder里面的encoder-decoder attention部分去掉了,只保留了masked self-attention,再加上feed-forward部分。再提一句,masked self-attention保证了GPT模型是一个单向的语言模型。 另外,作者在position encoding上做了调整,使用了可学习的位置编码,不同于transformer的三角函数位置编码。

最长回文子串

最长回文子串

题目:

https://leetcode-cn.com/problems/longest-palindromic-substring/

思路:

​ 一开始暴力解法,比较好想,结果超时了哎,后来看见了标签是动态规划,才知道不能暴力

class Solution:
    def longestPalindrome(self, s: str) -> str:
        if len(s) <= 1:
            return s
        maxs = -float("inf")
        res = collections.defaultdict(list)
        left,right = 0,len(s)-1
        while left < right:
            for i in range(left,right+2):
                if s[left:i] == s[left:i][::-1]:
                    maxs = max(maxs,len(s[left:i]))
                    res[maxs].append(s[left:i])
            left += 1
        return max(res[max(res.keys())],key=len)

也用到了双指针,超时在情理之中。

有效的数独

有效的数独

https://leetcode-cn.com/problems/valid-sudoku/

#有效的数独 难点在将3*3里的数取出来


class Solution:
    def isValidSudoku(board) -> bool:
        for line1,line2 in zip(board,zip(*board)): #行列
            for n1,n2 in zip(line1,line2):
                if (n1 != '.' and line1.count(n1) > 1) or (n2!='.' and line2.count(n2) >1):
                    return False
        pal = [[board[i+m][j+n] for m in range(3) for n in range(3) if board[i+m][j+n] != '.'] for i in (0, 3, 6) for j in (0, 3, 6)]
        for line in pal:
            if len(set(line)) != len(line):
                return False
        return True

使括号有效的最少添加

使括号有效的最少添加

题目:

https://leetcode-cn.com/problems/minimum-add-to-make-parentheses-valid/

思路:

通过一个值来判断是否匹配

代码:

class Solution:
    def minAddToMakeValid(self, S: str) -> int:
        res,temp = 0,0
        for i in S:
            if i == '(':
                temp += 1
            if i == ')':
                temp -= 1
                if temp == -1:
                    temp = 0
                    res += 1
        return res + temp
            

如果右括号过多的话,就在左边补一个左括号。这时结果+1

Ensemble Learning

集成学习

在机器学习的有监督学习算法中,我们的目标是学习出一个稳定的且在各个方面表现都较好的模型,但实际情况往往不这么理想,有时我们只能得到多个有偏好的模型(弱监督模型,在某些方面表现的比较好)。集成学习就是组合这里的多个弱监督模型以期得到一个更好更全面的强监督模型,集成学习潜在的思想是即便某一个弱分类器得到了错误的预测,其他的弱分类器也可以将错误纠正回来。 集成学习在各个规模的数据集上都有很好的策略。 数据集大:划分成多个小数据集,学习多个模型进行组合 数据集小:利用Bootstrap方法进行抽样,得到多个数据集,分别训练多个模型再进行组合

数据预处理

导入必要的包

import pandas as pd
import numpy as np

读入数据

data = pd.read_csv("./datasets/Data.csv")
data.head()
Country Age Salary Purchased
0 France 44.0 72000.0 No
1 Spain 27.0 48000.0 Yes
2 Germany 30.0 54000.0 No
3 Spain 38.0 61000.0 No
4 Germany 40.0 NaN Yes

确定X,Y变量

X = data.iloc[:,:-1].values
Y = data.iloc[:,3].values

数据空值处理

from sklearn.impute import SimpleImputer
imputer = SimpleImputer()
X[:,1:3] = imputer.fit_transform(X[:,1:3])
X
array([['France', 44.0, 72000.0],
       ['Spain', 27.0, 48000.0],
       ['Germany', 30.0, 54000.0],
       ['Spain', 38.0, 61000.0],
       ['Germany', 40.0, 63777.77777777778],
       ['France', 35.0, 58000.0],
       ['Spain', 38.77777777777778, 52000.0],
       ['France', 48.0, 79000.0],
       ['Germany', 50.0, 83000.0],
       ['France', 37.0, 67000.0]], dtype=object)

编码处理

from sklearn.preprocessing import LabelEncoder,OneHotEncoder
labelencoder = LabelEncoder()
X[:,0] = labelencoder.fit_transform(X[:,0])
onehotencoder = OneHotEncoder()
X = onehotencoder.fit_transform(X).toarray()
labelencoder_Y = LabelEncoder()
Y = labelencoder_Y.fit_transform(Y)

分割数据

from sklearn.model_selection import train_test_split
X_train,X_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.2,
                                                 random_state=0)

标准化

from sklearn.preprocessing import StandardScaler
sc_X = StandardScaler()
X_train = sc_X.fit_transform(X_train)
X_test = sc_X.fit_transform(X_test)