添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

kk

yield

blog.csdn.net/mieleizhi


先把yield看做“return”,在程序中返回某个值,返回之后程序就不再往下运行了。看做return之后再把它看做一个是生成器(generator)的一部分(带yield的函数才是真正的迭代器)

简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。

原文链接: python中yield的用法详解--最简单,最清晰的解释_mieleizhi0522的博客-CSDN博客_yield

菜鸟 Python yield 使用浅析 runoob.com/w3cnote/pyth

================================

logging.basicConfig Python logging 模块之 logging.basicConfig 用法和参数详解

open函数 cnblogs.com/chenlin163/



pickle模块

python基础学习(十六)--超详细!pickle模块的使用(pickle.dump()和pickle.load())_leilei7407的博客-CSDN博客_pickle.load(file)

blog.csdn.net/leilei740

pickle模块可以将任意的对象序列化成二进制的字符串写入到文件中。还可以从文件中读取并且转为写入时候类型。


在python3中pickle是使用转换二进制的数据压缩方法保存数据

所以,在保存或者读取数据的时候,打开文件应该使用rb,wb,wrb,ab的方式


pickle模块只能在python中使用,python中几乎所有的数据类型(列表,字典,集合,类等)都可以用pickle来序列化,

pickle序列化后的数据,可读性差,人一般无法识别。


通过pickle模块的序列化操作pickle.dump(obj, file, [,protocol]),将程序中运行的对象信息obj保存到文件file中去,永久存储。

通过pickle模块的反序列化操作pickle.load(file),我们能从文件中创建上一次程序保存的对象


import pickle

model=pickle.load(open(model_file,'rb'))

pickle.dump(cbow_model,open(model_file,'wb+'))



============== pickle.dump - case

import pickle

data={'a':[1,2,3],'b':'hello'} #创建字典变量


#以二进制方式来储存

pic = open(r'c:\xx\testdata.pkl','wb')

#将字典数据存储为一个pkl文件

pickle.dump(data,pic)

pic.close()

============== pickle.load - case


#读取 pickle.load(file)

pic2 = open(r'c:\xx\testdata.pkl','rb')

data=pickle.load(pic2)

print(data)

print(type(data)

==============Joblib

zhuanlan.zhihu.com/p/39 C-137:Python-joblib模块

Joblib功能:

  • 快速磁盘缓存:Python函数的memoize或make-like功能,适用于任意Python对象,包括大型numpy数组。
  • 快速压缩:替代pickle,使用joblib.dump和joblib.load可以提高大数据的读取和存储效率。
  • 加载下载好的模型用于预测时,用到的数据的格式应与训练该模型时的一致(变量个数、名称与格式等)。
  • 在从sklearn.externals引入joblib函数时,常会出现如下报错:from klearn.externals import joblib ImportError: cannot import name 'joblib',通常joblib导入不成功时主要是sklearn版本的问题,我们可以先卸载原有的sklearn,pip uninstall joblibscikit-leran sklearn,再安装指定版本的sklearn,pip install Scikit-learn==0.20.4 即可。


###### case 1 保存模型包,日常训练保存为pkl格式,网上都保存为m格式

from sklearn.externals import joblib # import joblib

joblib.dump(gbm_model_final, 'modelname2.pkl.z', compress=9) #写出训练好的模型结构

joblib.dump(gbm_model_final, 'modelname2.pkl', compress=9)#写出训练好的模型结构

gbm_model_final = joblib.load('modelname2.pkl') #读入,后续做预测


###### case 2

joblib.dump(value=best_est, filename='mybest_dt_model.m')

model = joblib.load(filename='mybest_dt_model.m') # 加载模型

model.predict(X=X[-10:]) #预测

##### lr也可以保存为pkl

# 加载模型 from sklearn.linear_model import LogisticRegression

from sklearn.metrics import accuracy_score, auc, roc_auc_score

import joblib

#逻辑回归模型的训练

lr_word = LogisticRegression( solver='sag', verbose=2)

lr_word.fit(tfidf_train, y_train)

# 保存模型,下次可以直接使用

joblib.dump(lr_word, 'lr_word_ngram.pkl')

#模型读取

model = joblib.load(filename="lr_word_ngram.pkl")

y_pred_word = lr_word.predict(tfidf_test)

print(accuracy_score(y_test, y_pred_word))

0.9405185561769192

Python 持久化模块pickle和joblib

joblib库是由scikit-learn外带的,常用于保存机器学习模型。对于大数据而言,joblib比pickle更加高效,但是joblib只能将对象存储在磁盘文件中,不能保存为字符串。

#注意:joblib模型保存后会出现.npy文件,可能很多,预测的使用需要依赖这个文件,copy模型的时候需要一起cp,不然会报错。所以我选择使用pickle

=========================


import pandas as pd

df1 = pd.read_table('data/txtname.txt', sep='|', header=None, names=['a', 'b']) #只读入a,b列


df1['a1'] = df1['a'].str.split('.').str[1] #以点分列,取第一个

df1['a0'] = df1['a'].str.split('.').str[0]

df1['b'] = df1['b'].str.endswith('_yy') #b列是否以'_yy'结尾,返回True/False


df2 = pd.read_excel('data/names.xlsx', engine='openpyxl', sheet_name='names2')



=========================


#按月统计:count、bad、good、badrate

df1=df0.groupby('month')['label'].agg(['count',('bad',lambda x: (x==1).sum()),('good',lambda x: (x==0).sum())])

df1['bad_rate']=df1['bad']/df1['count']

df1



======================== 展示汇总、train、test、oot在train的5分位数下分别的样本量


boundary=list(pd.qcut(df2[df2['type']=='train']['prob'],q=5,retbins=True)[-1]) #将train的prob切5等分

boundary=[-np.inf]+boundary+[np.inf] #前后字符串拼接inf


df2['bins_y']=pd.cut(df2['prob'],bins=boundary) #将prob按切分点切分,生成bins列


df_psi=df2.groupby('bins_y')['type'].agg(['count',

('train',lambda x: (x=='train').sum()),

('test',lambda x: (x=='test').sum()),

('oot',lambda x: (x=='oot2').sum())])

df_psi

========================


df1['var']=df1['var'].str.lower() #字符串转小写



========================



pd.set_option()参数详解


pd.set_option('display.max_columns', None) # 显示所有列

pd.set_option('display.max_columns', 5) #最多显示5列

pd.set_option('display.max_rows', None) # 显示所有行

pd.set_option('display.max_rows', 10) #最多显示10行

pd.set_option('display.width', 100) #显示宽度

pd.set_option('precision', 1) # 设置显示数值的精度

pd.set_option('display.float_format',lambda x: '%.2f'%x) #显示小数位数 -两位


下面接 df2.loc[], df2[[a,b]]可增加显示的行数



==========================

注册 图模型 Unveiling Fake Accounts (UFA图模型)

马东什么:Unveiling Fake Accounts at the Time of Registration: An Unsupervised Approach (完事儿)

异构图的目的是为了给同构图计算权重,权重超过一定阈值才建立边,但尚未划分社团,由louvain来分团

第二参考(里面有文献链接): zhuanlan.zhihu.com/p/44

论文原文链接,及时存储!!: pan.baidu.com/link/zhih


图相关paper

马东什么:标签传播,标签扩散,信念传播(待续)


================== 信念传播

Belief Propagation信念传播算法也称BP算法(这里要与反向传播的BP区分开)

从零学习Belief Propagation算法(一)

从零学习Belief Propagation算法(二)

从零学习Belief Propagation算法(三)


blog.csdn.net/qq_239472

blog.csdn.net/qq_239472

blog.csdn.net/qq_239472

==================

腾讯张露丹:面对聚类瓶颈,如何判断策略生效的关键节点?

mp.weixin.qq.com/s/XjJM

用户UBT数据,基于n-gram的聚类,基于action2vec的聚类

================== AI在度小满征信解读中的应用

度小满 人行征信数据 构建复杂模型

mp.weixin.qq.com/s/jnur

model1:self-attention

model2:对模型的结构上进一步优化,对贷款、贷记卡各自编码后,组成一个整体的序列,Session之间做一个序列模型

model3:把贷款的还款序列和贷款的基本信息(贷款是什么类型的贷款以及期数是多少)结合之后,放在一个序列之上,从而对前面的模型做一个增强。

model4:把征信文本(公司名)作为一个节点,构建关联网络

风险排序模型的应用:人工定义某个好坏的程度,蒸馏学习

模型可解释性:IG(Integrated gradients)方法,SHAP类方法


word2vec官网

radimrehurek.com/gensim


===================

blog.csdn.net/zz_dd_yy/

360baidu.cn/seo/cosine.


=======================



--------- import re


Python中re模块主要功能是通过正则表达式是用来匹配处理字符串的

python_re模块 - 小戳同学 - 博客园

import re (Python的re模块)


当我们在Python中使用正则表达式时,re模块内部会干两件事情:

1、编译正则表达式,如果正则表达式的字符串本身不合法,会报错;2、用编译后的正则表达式去匹配字符串。

那么如果一个正则表达式要重复使用几千次,出于效率的考虑,我们是不是应该先把这个正则先预编译好,接下来重复使用时就不再需要编译这个步骤了,直接匹配。如case1:先re.compile(),再使用 .findall() 或.match()等。



---------

re.compile()

re.match() 在字符串内查找匹配,找到第一个匹配,返回Match Object,或None

re.search () 在字符串内查找匹配,找到第一个匹配,返回Match Object,或None

re.match与re.search的区别:re.match只匹配字符串的开始,如果不符合则匹配失败返回None;而re.search匹配整个字符串,直到找到一个匹配。


re.findall 以列表形式返回所有匹配的字符串

re.split 以列表形式返回分割的字符串

re.sub 替换所有的匹配项,返回一个替换后的字符串,如果匹配失败,返回原字符串

re.subn()函数 替换匹配成功的指定位置字符串,并且返回替换次数,可以用两个变量分别接受

---------


group() 返回被 RE 匹配的字符串

start() 返回匹配开始的位置

end() 返回匹配结束的位置

span() 返回一个元组包含匹配 (开始,结束) 的位置


---------


re.I(re.IGNORECASE): 忽略大小写

re.M(MULTILINE): 多行模式,改变’^’和’$’的行为

re.S(DOTALL): 点任意匹配模式,改变’.’的行为

re.L(LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定

re.U(UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性

re.X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释


#第二个参数flags是匹配模式,可以使用按位或’|’表示同时生效,也可以在正则表达式字符串中指定。

pattern1 = re.compile('abc',re.I) #忽略大小写



--------- case1 re.compile(), findall()


In [1]: import re

In [2]: phone_number = re.compile('^\d{3,4}-?\d{8}$') #以3~4个[0~9]开头,-连接,?匹配一次或多次

In [3]: print phone_number

<_sre.SRE_Pattern object at 0x7f672ed46300>

In [4]: phone_number.findall('010-12345678')

Out[4]: ['010-12345678']

In [6]: phone_number.findall('0120-12345678')

Out[6]: ['0120-12345678']

In [5]: phone_number.findall('010-123456789')

Out[5]: []





--------- case2 split() 以列表形式返回分割的字符串

+ 元字符 匹配其前面的一个字符1次或多次

\W匹配非任何字母数字汉字字符包括下划线在内


import re

p = re.compile(r'\W+')

p.split('This is,short of split().') #将字符串分割,分隔符=任何非字母数字汉字字符(包括下划线)

返回:['This', 'is', 'short', 'of', 'split', '']


p.split('This is,short of split().',2) #maxsplit=2+1 限制分片数

返回:['This', 'is', 'short of split().']




--------- case3 sub()函数 替换匹配成功的指定位置字符串


\w匹配包括下划线在内任何字母数字汉字字符


import re

r=re.sub("a\w","*","AAadBBadCC") #将【a + 任意的\w匹配的字符】替换成 *

print(r)

AA*BB*CC




--------- case3 subn()函数 替换匹配成功的指定位置字符串,并且返回替换次数,可以用两个变量分别接受


import re

a,b=re.subn("a\w","*","AAadBBadCC")

print(a) #返回替换后的字符串

print(b) #返回替换次数


AA*BB*CC

2

=============


set -e

SQL="

select 1 from tmp_.tmp_tb1

"

result_count=`hive -e "$SQL" | wc -l`

echo "样本数为:${result_count}"

======

,nvl( x , -1) as x --缺失值赋值只需要nvl

spark-sql -e"select from"

======

#直接用del来删除变量,但是对于占用内存较大的对象,del并不管用,删除了内存也没见减小。有一个解决办法就是调用gc(垃圾回收)模块,就能立刻释放内存。

import gc

del x

gc.collect()

编辑于 2022-07-05 09:58