1.单选
1.1
第一题就是求投掷均匀正六面体骰子的熵,但很惨的是我只会算到
−
∑
p
×
l
o
g
(
p
)
-\sum{p \times log(p)}
−∑p×log(p),不知道如何继续向下求比特。
后来发现以2
为底的
l
o
g
log
log算出来就是比特…然而我也算错了
题目是: E n t r o p y = − 6 × 1 6 × l o g 2 1 6 Entropy = -6 \times \frac{1}{6} \times log_{2}{\frac{1}{6}} Entropy=−6×61×log261,而: l o g 2 1 4 = − 2 log_{2}{\frac{1}{4}} = -2 log241=−2, l o g 2 1 8 = − 3 log_{2}{\frac{1}{8}} = -3 log281=−3,则: − 3 < E n t r o p y < − 2 -3 < Entropy < -2 −3<Entropy<−2
1.2
在Kmeans算法当中,当邻近度函数为什么的时候,质心是中位数?1
1、曼哈顿距离: 质心:中位数。目标函数:最小化对象到其簇质心的距离和
2、平方欧几里德距离。质心:均值。目标函数:最小化对象到其簇质心的距离的平方和
3、余弦。质心:均值。最大化对象与其质心的余弦相似度和
4、Bregman 散度。质心:均值。目标函数:最小化对象到其簇质心的Bregman散度和
2.不定项2
2.1
以下属于聚类算法的是( ABD )。
A、K均值
B、DBSCAN
C、Apriori
D、Jarvis-Patrick(JP)
2.2
在评价不平衡类问题分类的度量方法有如下几种:(ABCD)
A、F1度量
B、召回率(recall)
C、精度(precision)
D、真正率(ture positive rate,TPR)
3.编程题
3.1
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# [1,2,2,3,4,5,6,7],2
# 1
# [2,7,8],3
# -1
# 有序数组,查找指定值的开始位置
# @param nums int整型一维数组
# @param target int整型
# @return int整型
#
class Solution:
def lowerBound(self , nums , target ):
# write code here
left,right = 0,len(nums)-1
# 左右两个边界
while(left<=right):
mid = left + (right-left) // 2
if(nums[mid]<target):
left = mid + 1
elif(nums[mid]>target):
right = mid - 1
else:
while(nums[mid-1] == nums[mid]) and (mid>0):
mid = mid - 1
return mid
return -1
3.2
模糊匹配两个单词,经过不超过两次的变换使得单词一致:
- 插入字母
- 删除字母
- 更改字母
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
# 两个单词,经过不超过两次的,插入、删除、替换,相一致
# 则为模糊匹配
# @param word1 string字符串
# @param word2 string字符串
# @return bool布尔型
#
class Solution:
def isFuzzyMatch(self , word1 , word2 ):
# write code here
word1 = [word1[i] for i in range(len(word1))]
word2 = [word2[i] for i in range(len(word2))]
option = 0
# 记录操作次数
if(len(word1)>len(word2)):
word1, word2 = word2, word1
# 确保word1长度小于等于word2
if(len(word2)-len(word1)>2):
return False
# 如果两个单词长度差距超过2,则不匹配
elif(len(word2)-len(word1)>0):
# 两者之间相差1或者2
for i in range(len(word2)):
if(i<len(word1))and(word1[i]==word2[i]):
# 不超出word1
continue
elif(i+1<len(word2))and(word1[i]==word2[i+1]):
word1.insert(i,'0')
# 此位与下一位匹配,则后移
elif(i+2<len(word2))and(word1[i]==word2[i+2]):
word1.insert(i,'0')
word1.insert(i+1,'0')
# 此位与下二位匹配,则后移
for i in range(len(word2)-len(word1)):
word1.append('0')
# 补齐长度
# 此时两者长度一致
for i in range(len(word2)):
if(word1[i]==word2[i]):
continue
else:
option += 1
# 判断操作次数
if(option>2):
return False
else:
return True
solve = Solution()
print(solve.isFuzzyMatch("adais","adidas"))
4.主观题
4.1
SVM和随机森林的区别?
4.2
判别模型和生成模型的区别?
4.3
为什么要做数据归一化?
4.4
简述知识蒸馏的原理
4.5
item_cf和user_cf的原理以及计算方法