python高级在线题目训练-第二套·主观题_请编写python代码实现下列要求。给定一个字符串,从头部或尾部截取指定数量的字符

29 阅读5分钟

for i in words: if i == '': # 是空就跳过 continue if i not in text_count.keys(): # 遍历所有的key text_count[i] = 1 # 如果不存在代表是个新单词,重新+1就行 else: text_count[i] += 1 # 不是新单词就在原来的key的值上+1

result = sorted(text_count.items(), key=lambda x: x[1], reverse=True) print(result)


### 2、(操作题)请编写Python代码实现下列要求。



### 给定一个字符串,从头部或尾部截取指定数量的字符串,然后将其翻转拼接。



def reStr(str_info, nums): """ str_info "有这么个字符串,给定长度然后反转" nums # 给定长度 :param str_info: :param nums: :return: """ head_left = str_info[0: nums] head_right = str_info[nums:] last_left = str_info[0: len(str_info) - nums] last_right = str_info[len(str_info) - nums:]

print("头部cut翻转 : ", (head_right + head_left))
print("尾部cut翻转 : ", (last_right + last_left))

reStr("我拥有一个世界。", 3)

reStr(input(), int(input())) """ 输入示例: 我拥有一个个世界 2 输出示例: 头部cut翻转 : 有一个个世界我拥 尾部cut翻转 : 世界我拥有一个个 """


### 3、请简述K-Means聚类算法的流程。



> 
> 1、从数据中选择k个对象作为初始聚类中心;
> 
> 
> 2、计算每个聚类对象到聚类中心的距离来划分;
> 
> 
> 3、再次计算每个聚类中心;
> 
> 
> 4、计算标准测度函数,之道达到最大迭代次数,则停止,否则,继续操作。
> 
> 
> 




---


下面是一些理论,可以略过:


   K-means也是聚类算法中最简单的一种了,但是里面包含的思想却是不一般。最早我使用并实现这个算法是在学习韩爷爷那本数据挖掘的书中,那本书比较注重应用。看了Andrew Ng的这个讲义后才有些明白K-means后面包含的EM思想。


     聚类属于无监督学习,以往的回归、朴素贝叶斯、SVM等都是有类别标签y的,也就是说样例中已经给出了样例的分类。而聚类的样本中却没有给定y,只有特征x,比如假设宇宙中的星星可以表示成三维空间中的点集


![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/da0ae2fde8a74a3984b82ccdd022890f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066805&x-signature=yvRAkV%2Fmm1SHQyM60nyNOenqoEc%3D)


。聚类的目的是找到每个样本x潜在的类别y,并将同类别y的样本x放在一起。比如上面的星星,聚类后结果是一个个星团,星团里面的点相互距离比较近,星团间的星星距离就比较远了。


 在聚类问题中,给我们的训练样本是


![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e3d7d33624fe4fd1b432686b4ca7fa87~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066805&x-signature=oZVKaSBhztWOc2sjba0kX%2BM1xZo%3D)


,每个,没有了y。


     K-means算法是将样本聚类成k个簇(cluster),具体算法描述如下:


1、 随机选取k个聚类质心点(cluster centroids)为![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/18d38156f00d403ca085def074aa79b3~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066805&x-signature=LXbZ8bgw2C6GplN%2FOp9pnVprfjw%3D)。


2、 重复下面过程直到收敛 {


               对于每一个样例i,计算其应该属于的类


               ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/6f3370210c3f4798ae7cd2729da1f970~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066805&x-signature=FxjJdUYHJDRYlwsffTDsarFnDzc%3D)


               对于每一个类j,重新计算该类的质心


               ![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e7712b3ba47346a58e2d575444ac67bc~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066805&x-signature=0sAf7pcXQiw3qkEUDbmtzSov%2Bxo%3D)


}


     K是我们事先给定的聚类数,


![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/75103a01b2b44ea1bd43213c0d9922f5~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066805&x-signature=ZTYdkD%2FheMp25Knu7XUPeAa%2B5yI%3D)


代表样例i与k个类中距离最近的那个类,的值是1到k中的一个。质心代表我们对属于同一个类的样本中心点的猜测,拿星团模型来解释就是要将所有的星星聚成k个星团,首先随机选取k个宇宙中的点(或者k个星星)作为k个星团的质心,然后第一步对于每一个星星计算其到k个质心中每一个的距离,然后选取距离最近的那个星团作为,这样经过第一步每一个星星都有了所属的星团;第二步对于每一个星团,重新计算它的质心(对里面所有的星星坐标求平均)。重复迭代第一步和第二步直到质心不变或者变化很小。


     下图展示了对n个样本点进行K-means聚类的效果,这里k取2。


![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/e77e106dc9b644cf8b5f897509e4273f~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066805&x-signature=Ab1YPX8aTEwlUZ5VnWFb2Dad9xA%3D)


K-means面对的第一个问题是如何保证收敛,前面的算法中强调结束条件就是收敛,可以证明的是K-means完全可以保证收敛性。下面我们定性的描述一下收敛性,我们定义畸变函数(distortion function)如下:


     


![](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/34ad7788d3444325baebcfa13d9ea92e~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066805&x-signature=uasoQWnWCfB6MxioY3yg0Dn4SIQ%3D)


     J函数表示每个样本点到其质心的距离平方和。K-means是要将J调整到最小。假设当前J没有达到最小值,那么首先可以固定每个类的质心


![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/8a4bf2402a254650b758b61e082be6ad~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066805&x-signature=%2Fcc00FVmlamge%2B%2FlEN39eEkQYCU%3D)
![img](https://p6-xtjj-sign.byteimg.com/tos-cn-i-73owjymdk6/3fa3037eec664d669dbdb579cbf3d770~tplv-73owjymdk6-jj-mark-v1:0:0:0:0:5o6Y6YeR5oqA5pyv56S-5Yy6IEAg5py65Zmo5a2m5Lmg5LmL5b-DQUk=:q75.awebp?rk3s=f64ab15b&x-expires=1773066805&x-signature=9ecVIhlR99mNdD7gYhSlTpd6dtE%3D)

**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化资料的朋友,可以戳这里获取](https://gitee.com/vip204888)**


**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**