/images/avatar.png

vllbc

melt

pd.melt

用法

直观的看就是将宽数据转化为长数据。转化为variable-value这样的形式。

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

参数解释:

  • frame:要处理的数据集。
  • id_vars:不需要被转换的列名。
  • value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了。
  • var_name和value_name是自定义设置对应的列名。
  • col_level :如果列是MultiIndex,则使用此级别。 ## 实例
import pandas as pd
df = pd.DataFrame({'A': {0: 'a', 1: 'b', 2: 'c'},
                   'B': {0: 1, 1: 3, 2: 5},
                   'C': {0: 2, 1: 4, 2: 6}
                   })
df
'''
   A  B  C
0  a  1  2
1  b  3  4
2  c  5  6
'''
pd.melt(df, id_vars=['A'], value_vars=['B'])
'''
   A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
'''

pd.melt(df, id_vars=['A'], value_vars=['B', 'C'])
'''
   A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
3  a        C      2
4  b        C      4
5  c        C      6
'''
pd.melt(df, id_vars=['A'], value_vars=['B'],
        var_name='myVarName', value_name='myValueName')
'''
   A myVarName  myValueName
0  a         B            1
1  b         B            3
2  c         B            5
'''
pd.melt(df, id_vars=['A'], value_vars=['B', 'C'],
        ignore_index=False)
'''
   A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
0  a        C      2
1  b        C      4
2  c        C      6
'''
# 多重索引
df.columns = [list('ABC'), list('DEF')]
df
'''
   A  B  C
   D  E  F
0  a  1  2
1  b  3  4
2  c  5  6
'''

# 选择最外层索引
pd.melt(df, col_level=0, id_vars=['A'], value_vars=['B'])
'''
   A variable  value
0  a        B      1
1  b        B      3
2  c        B      5
'''

# 选择内层索引
pd.melt(df, col_level=1, id_vars=['D'], value_vars=['E'])

# 选择复合索引
pd.melt(df, id_vars=[('A', 'D')], value_vars=[('B', 'E')])
'''
  (A, D) variable_0 variable_1  value
0      a          B          E      1
1      b          B          E      3
2      c          B          E      5
'''

预训练模型

预训练模型

概述

预训练模型,则是使自然语言处理由原来的手工调参、依靠 ML 专家的阶段,进入到可以大规模、可复制的大工业施展的阶段。而且预训练模型从单语言、扩展到多语言、多模态任务。一路锐气正盛,所向披靡。

flip

矩阵的反转,可以按照各个维度很好理解。 例子:

cs_matrix = np.array([[ 4,  3,  2,  1,  0], [ 8,  7,  6,  5,  1], [11, 10,  9,  6,  2], [13, 12, 10,  7,  3], [14, 13, 11,  8,  4]])
np.flip(cs_matrix, 0)

变成了:

np.flip(cs_matrix, 1)

变成了:

ELMo

ELMo

在Transformer中提到了ELMo解决了word2vec中存在的多义词问题,其使用双向的LSTM作为特征提取器,考虑了上下文的语义,所以可以解决多义词问题。这篇文章就详细介绍一下ELMo。

线性回归

参考: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:
        counts = 0
        for i in range(n):
            if self.isprime(i):
                counts += 1
        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简单的多,不需要间隔最大,只需要分开就可以。同时老师在课堂上面讲的版本也有点不一样,主要是计算上的不同,本质还是一样的。然后就打算整理一下这一块。

最大数

最大数

题目:

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)
        nums.sort(key=Comapre)
        return str(int(''.join(map(str,nums))))

注意的是这里利用了自定义的比较类型,继承了str,也可以从functools里导入cmp_to_key方法来实现比较