ELMo
ELMo
在Transformer中提到了ELMo解决了word2vec中存在的多义词问题,其使用双向的LSTM作为特征提取器,考虑了上下文的语义,所以可以解决多义词问题。这篇文章就详细介绍一下ELMo。
在Transformer中提到了ELMo解决了word2vec中存在的多义词问题,其使用双向的LSTM作为特征提取器,考虑了上下文的语义,所以可以解决多义词问题。这篇文章就详细介绍一下ELMo。
简单得理解,就是对于多个学习器,分别对结果进行预测,然后将预测的结果作为特征,再对结果进行预测。
上一张经典的图:
以这个5折stacking为例:
参考:https://cuijiahua.com/blog/2017/11/ml_11_regression_1.html
回归的目的是预测数值型的目标值。最直接的办法是依据输入写出一个目标值的计算公式。
HorsePower = 0.0015 * annualSalary - 0.99 * hoursListeningToPublicRadio
这就是所谓的回归方程(regression equation),其中的0.0015和-0.99称为回归系数(regression weights),求这些回归系数的过程就是回归。一旦有了这些回归系数,再给定输入,做预测就非常容易了。具体的做法是用回归系数乘以输入值,再将结果全部加在一起,就得到了预测值。
https://leetcode-cn.com/problems/count-primes/
一开始直接暴力,隐约感觉会超时,果然不出我所料
class Solution:
def countPrimes(self, n: int) -> int:
= 0
counts for i in range(n):
if self.isprime(i):
+= 1
counts return counts
def isprime(self,n):
from itertools import count
if n <=1:
return False
for i in count(2):
if i* i > n:
return True
if n % i == 0:
return False
我还特意用了itertools库,没想到还是超时了
感知机印象中没有系统学习过但是是一个很简单的算法,最近看了一下李航老师的统计学习方法,发现感知机的思想和svm十分类似,并且比svm简单的多,不需要间隔最大,只需要分开就可以。同时老师在课堂上面讲的版本也有点不一样,主要是计算上的不同,本质还是一样的。然后就打算整理一下这一块。
目的:手动将抽取出的样本堆叠起来,构造成batch Trainer函数有一个参数data_collator,其值也为一个函数,用于从一个list of elements来构造一个batch。 如下
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
import plotly.graph_objects as go
= pd.read_csv("./datasets/Social_Network_Ads.csv")
data = data.iloc[:,[2,3]].values
X = data.iloc[:,4].values
Y # scatter = go.Scatter(x=X[:,0],y=X[:,1],mode='markers',marker={'color':Y})
# fig = go.Figure(scatter)
# fig.show()
= train_test_split(X,Y,test_size=0.25,random_state=0) X_train,X_test,Y_train,Y_test
from sklearn.preprocessing import StandardScaler
= StandardScaler()
sca = sca.fit_transform(X_train)
X_train = sca.transform(X_test) X_test
from sklearn.neighbors import KNeighborsClassifier
= KNeighborsClassifier(n_neighbors=5,p=2)
model model.fit(X_train,Y_train)
KNeighborsClassifier()
model.score(X_test,Y_test)
0.93
https://leetcode-cn.com/problems/largest-number/
一开始直接暴力搜索,把所有的情况都列举然后比较,结果超时了,最后利用了自定义排序的方法
class Solution:
def largestNumber(self, nums: List[int]) -> str:
class Comapre(str):
def __lt__(self,other):
return int(self+other) > int(other+self)
=Comapre)
nums.sort(keyreturn str(int(''.join(map(str,nums))))
注意的是这里利用了自定义的比较类型,继承了str,也可以从functools里导入cmp_to_key方法来实现比较
https://leetcode-cn.com/problems/check-balance-lcci/
算深度,然后作差是否大于1
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
if self.maxdepth(root) < 1:
return True
if abs(self.maxdepth(root.left) - self.maxdepth(root.right)) > 1:
return False
return self.isBalanced(root.right) and self.isBalanced(root.left)
def maxdepth(self,root):
if not root:
return 0
return 1 + max(self.maxdepth(root.right),self.maxdepth(root.left))