算法简介及二分法
1.什么是算法
算法(Algorithm)是指解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。也就是说,能够对一定规范的输入,在有限时间内获得所要求的输出。如果一个算法有缺陷,或不适合于某个问题,执行这个算法将不会解决这个问题。不同的算法可能用不同的时间、空间或效率来完成同样的任务。一个算法的优劣可以用空间复杂度与时间复杂度来衡量。
文末领取全套最新Python学习资源!
一个算法应该具有以下七个重要的特征:
①有穷性(Finiteness):算法的有穷性是指算法必须能在执行有限个步骤之后终止;
②确切性(Definiteness):算法的每一步骤必须有确切的定义;
③输入项(Input):一个算法有0个或多个输入,以刻画运算对象的初始情况,所谓0个输 入是指算法本身定出了初始条件;
④输出项(Output):一个算法有一个或多个输出,以反映对输入数据加工后的结果。没 有输出的算法是毫无意义的;
⑤可行性(Effectiveness):算法中执行的任何计算步骤都是可以被分解为基本的可执行 的操作步,即每个计算步都可以在有限时间内完成(也称之为有效性);
⑥高效性(High efficiency):执行速度快,占用资源少;
⑦健壮性(Robustness):对数据响应正确。
2.算法的应用场景
金融领域
金融领域使用机器学习建模最多的场景就是风控。当然风控也要进行细分,主要应用机器学习建模的细分场景如下:
信用卡交易反欺诈:分类任务,GBDT算法+LR逻辑回归;
信用卡申请反欺诈:分类任务,GBDT算法+LR逻辑回归;
贷款申请反欺诈:分类任务,GBDT算法+LR逻辑回归;
反洗钱:分类任务,GBDT算法+LR逻辑回归;
媒体领域
在媒体领域最典型的就是今日头条了,包括像很多其他的媒体端如小红书、抖音等;这里面最常应用机器学习的就是推荐场景。大家经常发现的一点就是今日头条、小红书经常会根据你之前看过的一些内容来给你推相关内容。比如你经常看大长腿,小红书就一直给你推,别问我怎么知道的。
推荐:基于内容item的推荐、基于知识图谱的推荐、基于协同过滤算法的推荐。资讯信息物料的推荐,这里面会涉及到Doc2Vec、Lsi等算法,因为涉及到一部分对于物料语义的理解。
零售领域
在零售领域,使用机器学习建模最多的场景也是推荐场景和搜索场景中的排序。APP上购物车页面提交订单时为用户推荐相似商品、推荐可能感兴趣的商品,以及针对什么样的用户推荐什么样的优惠券等等。
推荐:协同过滤CF算法、FM算法+LR排序模型、深度学习模型目前在推荐领域使用也十分广泛了。
除去推荐,零售领域还有一个使用机器学习建模比较多的场景,就是对某类商品进行销量预测,根据预测量来调整商品的供给。
销量预测:目前基本都转用LightGBM算法了;
文末领取全套最新Python学习资源!
3.算法工程师的要求
- 1.专业要求:计算机、电子、通信、数学等相关专业;
- 2.学历要求:本科及其以上的学历,大多数是硕士学历及其以上;
- 3.语言要求:英语要求是熟练,基本上能阅读国外专业书刊;
- 4.必须掌握计算机相关知识,熟练使用仿真工具MATLAB等,必须会一门编程语言。
- 5.算法工程师一般都是学的数据挖掘和机器学习,而且对专业要求比较高,对能力也有一定的限制。 算法工程师是一个非常高端的职位; 专业要求:计算机、电子、通信、数学等相关专业; 学历要求:本科及其以上的学历,大多数是硕士学历及其以上。
4.算法部门
不是所有的互联网公司都养得起算法部分 只有大型互联网公司才有
算法部门类似于药品研发部分
5.二分法
是算法中最简单的算法 甚至都称不上是算法
二分法的使用要求
待查询的数据集必须要有
二分法的缺陷
针对开头结尾的数据 查找效率很低
常见算法的原理以及伪代码
二分法、冒泡、快拍、插入、堆排、捅排、数据结构(链表 约瑟夫问题 如何链表是否成环)
l1 = [11,22,33,44,55,66,77,88,99,100]
查找列表中的某个数据值
方式1:for循环 次数较多
方式2:二分法 不断的对数据集做二分切割
'''代码实现部分'''
定义我们想要查找的数据值
target_num = 66
def get_middle(l1,target_num):
#添加一个结束条件
if len (l1) == 0:
print('很抱歉 没找到')
return
#1.获取列表中间索引值
middle_index = len(l1)//2
#2.比较目标数据值与中间索引值的大小
if target_num > l1[midle_index]:
#切片保留列表右边一半
right_l1 = l1[middle_index + 1:]
print(right_11)
#针对右边的一半的列表继续二分并判断 感觉要用递归函数
return get_middle(right_l1,target_num)
elif target_num < l1[middle_index]:
#切片保留列表左边一半
left_l1 = l1[:middle_index]
print(left_11
#针对左边一半的列表继续二分并判断>>> 感觉要用递归函数
return get_middle(left_l1,target_num)
else:
print('恭喜你 找到了')
get_middle(l1,66)
get_middle(l1,11)
get_middle(l1,100)
三元表达式
作用:简化步骤 代码简单并且只有一行 那么可以直接在冒号后面编写
name = 'jason'
if name == 'jason':
print('老师')
else:
print('学生')
print('学生')
用三元表达式简化:
res = '老师' if name =='jason'else'学生'
print(res)
数据值1 if 条件 else 数据值2
条件城里则使用数据值1 条件不成立则使用数据值2
当结果是二选一的情况下 使用三元表达式较为简便
但是 不推荐多个三元表达式嵌套
各种生成式/表达式/推导式
name_list = ['jason', 'kevin', 'oscar', 'tony', 'jerry']
给列表中所有人名的后面加上_NB的后缀
for循环
new_list =
for name in name_list:
data = f'{name}_NB'
new_list.append(data)
print(new_list)
列表生成式
先看for循环 每次for循环之后再看for关键字前面的操作
new_list = [name + "_NB" for name in name_list]
print(new_list)
复杂情况
new_list = [name + "_NB" for name in name_list if name == 'jason']
print(new_list)
new_list = ['大佬' if name == 'jason' else '小赤佬' for name in name_list if ame != 'jack']
print(new_list)
字典生成式
s1 = 'hello world'
for i,j in enumerate(s1,start=100):
print(i,j)
d1 = {i: j for i, j in enumerate('hello')}
print(d1)
集合生成式
res = {i for i in 'hello'}
print(res)
元组生成式>>>:没有元组生成式 下列的结果是生成器(后面讲)
res = (i+'SB' for i in 'hello')
print(res)
for i in res:
print(i)
匿名函数
没有名字的函数 需要使用关键字lambda
语法结构
lambda 形参:返回值
使用场景
lambda a,b:a+b
匿名函数一般不单独使用 需要配合其他函数一起用
常见内置函数
1.map() 映射
l1 = [1, 2, 3, 4, 5]
def func(a):
return a+1
res = map(lambda x:x+1,l1)
print(list(red))
2.max(),min()
l1 = [11,22,33,44]
res = max(l1)
d1 = {
'zj': 100,
'jason':888,
'berk':99999,
'oscar':1
}
def func(a):
return d1.get(a)
# res = max(d1, key=lambda k:d1.get(k))
res = max(d1, key = func)
print(res)
3.reduce
# reduce 传播多个值 返回一个值
from functools import reduce
l1 = [11,22,33,44,55,66,77,88,]
res = reduce(lambda a,b: a*b,11)
print(res)
'''好奇执行流程可以使用debug模式简单看看'''
以上就是今天的全部内容分享,觉得有用的话欢迎点赞收藏哦!
Python经验分享
学好 Python 不论是用于就业还是做副业赚钱都不错,而且学好Python还能契合未来发展趋势——人工智能、机器学习、深度学习等。
小编是一名Python开发工程师,自己整理了一套最新的Python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。如果你也喜欢编程,想通过学习Python转行、做副业或者提升工作效率,这份【最新全套Python学习资料】 一定对你有用!
小编为对Python感兴趣的小伙伴准备了以下籽料 !
对于0基础小白入门:
如果你是零基础小白,想快速入门Python是可以考虑培训的!
- 学习时间相对较短,学习内容更全面更集中
- 可以找到适合自己的学习方案
包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、机器学习、Python量化交易等学习教程。带你从零基础系统性的学好Python!
一、Python所有方向的学习路线
Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
二、学习软件
工欲善其事必先利其器。学习Python常用的开发软件都在这里了,给大家节省了很多时间。
三、入门学习视频
我们在看视频学习的时候,不能光动眼动脑不动手,比较科学的学习方法是在理解之后运用它们,这时候练手项目就很适合了。
四、实战案例
光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
五、面试资料
我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
最新全套【Python入门到进阶资料 & 实战源码 &安装工具】(安全链接,放心点击)
我已经上传至CSDN官方,如果需要可以扫描下方官方二维码免费获取【保证100%免费】
*今天的分享就到这里,喜欢且对你有所帮助的话,记得点赞关注哦~下回见 !