kk
yield
https:// blog.csdn.net/mieleizhi 0522/article/details/82142856/
先把yield看做“return”,在程序中返回某个值,返回之后程序就不再往下运行了。看做return之后再把它看做一个是生成器(generator)的一部分(带yield的函数才是真正的迭代器)
简要理解:yield就是 return 返回一个值,并且记住这个返回的位置,下次迭代就从这个位置后开始。
原文链接: python中yield的用法详解--最简单,最清晰的解释_mieleizhi0522的博客-CSDN博客_yield
菜鸟 Python yield 使用浅析 https://www. runoob.com/w3cnote/pyth on-yield-used-analysis.html
================================
logging.basicConfig Python logging 模块之 logging.basicConfig 用法和参数详解
open函数 https://www. cnblogs.com/chenlin163/ p/7261201.html
pickle模块
python基础学习(十六)--超详细!pickle模块的使用(pickle.dump()和pickle.load())_leilei7407的博客-CSDN博客_pickle.load(file)
https:// blog.csdn.net/leilei740 7/article/details/107262451/
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
https:// zhuanlan.zhihu.com/p/39 2280022 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来分团
第二参考(里面有文献链接): https:// zhuanlan.zhihu.com/p/44 0980396
论文原文链接,及时存储!!: https:// pan.baidu.com/link/zhih u/7Eh3zQuTh5iGVFhj1iVzoMtEMhT4MHSQQoF2==
图相关paper
================== 信念传播
Belief Propagation信念传播算法也称BP算法(这里要与反向传播的BP区分开)
从零学习Belief Propagation算法(二)
从零学习Belief Propagation算法(三)
https:// blog.csdn.net/qq_239472 37/article/details/78385110
https:// blog.csdn.net/qq_239472 37/article/details/78387894
https:// blog.csdn.net/qq_239472 37/article/details/78389188
==================
https:// mp.weixin.qq.com/s/XjJM kYxvdSnY8RC1y-7AxA
用户UBT数据,基于n-gram的聚类,基于action2vec的聚类
================== AI在度小满征信解读中的应用
度小满 人行征信数据 构建复杂模型
https:// mp.weixin.qq.com/s/jnur VEVzZpbPe3z1mOlZLg
model1:self-attention
model2:对模型的结构上进一步优化,对贷款、贷记卡各自编码后,组成一个整体的序列,Session之间做一个序列模型
model3:把贷款的还款序列和贷款的基本信息(贷款是什么类型的贷款以及期数是多少)结合之后,放在一个序列之上,从而对前面的模型做一个增强。
model4:把征信文本(公司名)作为一个节点,构建关联网络
风险排序模型的应用:人工定义某个好坏的程度,蒸馏学习
模型可解释性:IG(Integrated gradients)方法,SHAP类方法
word2vec官网
https:// radimrehurek.com/gensim /models/word2vec.html
===================
https:// blog.csdn.net/zz_dd_yy/ article/details/51926305
http://www. 360baidu.cn/seo/cosine. html
=======================
--------- 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()