一、部分神经网络
实现如下神经网络: 输入层包含两个神经元i1,i2和bias项b1;第二层隐含层包含h1,h2两个神经元和bias项b2;第三层是输出层包含o1,o2。每条线上标的w是层与层之间连接的权重,激活函数为sigmoid函数,假设两个输入是0.5和0.1。
import numpy as np
#激活函数sigmoid
def sigmoid(x):
return 1 / (1 + np.exp(-x))
if __name__ == '__main__':
wi = [[0.25, 0.20], [0.30, 0.15]] # Weight of input layer
wo = [[0.40, 0.45] , [0.50, 0.55]] # Weight of output layer
b1 = 0.30
b2 = 0.65
x = [0.5, 0.1]
# 前向传播
z1 = np. dot (wi, x) + b1 # 矩阵相乘
a1 = sigmoid (z1)
z2 = np. dot(wo, x) + b2
a2 = sigmoid (z2)
print( "result:" + str(a2[0]) + ", result:" +str(a2[1]))
结果:
result:0.7099209183344533, result:0.7221196058493572
二、输入两个集合setA和setB,分别输出它们的交集、并集、差集
Python set() 函数
python求两个列表的并集.交集.差集
python 集合比较(交集、并集,差集)
python的set和其他语言类似, 是一个无序不重复元素集, 基本功能包括关系测试和消除重复元素. 集合对象还支持union(联合), intersection(交), difference(差)和sysmmetric difference(对称差集)等数学运算.
x & y # 交集
x | y # 并集
x - y # 差集 (项在x中,但不在y中)
x ^ y # 对称差集(项在x或y中,但不会同时出现在二者中)
例子:
A = [1,2,3,4]
B = [3,4,5,6]
print('交集:', set(A) & set(B))
print('并集:', set(A) | set(B))
print('差集:', set(A) - set(B))
交集: {3, 4}
并集: {1, 2, 3, 4, 5, 6}
差集: {1, 2}
三、广度优先搜索算法
数据结构之广度优先算法的Python简单实现
在某社交网络中存在一位意见领袖,需要使用广度优先搜索算法找出这位意见领袖。社交网络通过散列表的形式保存,如用户"赵"关注了"钱"、“孙"和"李”,而"钱"关注了"周"和"吴",则保存为:
graph[“赵”] = [“钱”, “孙”, “李”]
graph[“钱”] = [“周”, “吴”]
程序使用一个预定义的函数person_is_leader§来判断用户是否为意见领袖。假设从用户"赵"开始搜索,需要确认他的关系网中是否有意见领袖。改正下列代码,使其能够得到正确的结果。
from collections import deque
graph = {}
graph["赵"] = ["钱", "孙", "李"]
graph["钱"] = ["周", "吴"]
# 假设我们这样判断,如果这个人的姓名是以m结尾,那么它就是芒果销售商
def person_is_leader(name):
return name[-1] == ""
def main():
# deque()函数用于创建一个双向队列
search_quene = deque()
# 假设从用户"赵"开始搜索
search_quene += graph["赵"]
while search_quene:
person = search_quene.popleft()
if person_is_leader(person):
print (person + " is the leader.")
return True
else:
search_quene += person #将person的关注者加入队列search_quene
return False
if __name__ == '__main__':
main()
四、贪婪算法
某辆车加满油后最多可以行驶600公里,同时高速公路上有若干加油站,相邻站点之间的距离均小于600公里,加油站之间的距离信息保存在一个列表Distances里。现在需要通过贪婪算法求出此车辆跑满全程所需要加油的最少次数。
Distances = [200,300,400,100,200,500]
num = i = s = 0
while i < len(Distances):
s += Distances[i]
if s >= 600:
s = Distances[i]
num += 1
i += 1
print(num)
3
五、Logistic回归预测
现有学习驾驶技术投入的练习时间(月)与通过考试成绩(是否通过)的历史数据,现使用Logistic回归预测训练时间为两个半月的考试成绩。
import numpy as np
x = np.array(
[0.50, 0.75, 1.00, 1.25, 1.50, 1.75, 1.75, 2.00, 2.25, 2.50, 2.75, 3.00, 3.25, 3.50, 4.00, 4.25, 4.50, 4.75, 5.00,
5.50]) # 训练时间(月)
y = np.array([0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1]) # 通过考试为1,不通过考试为0
from sklearn.linear_model import LogisticRegression
m = LogisticRegression() #逻辑回归模型定义
x = x.reshape(-1, 1) #如果只有一个特征,重塑为一列数组
y = y.reshape(-1,1)
m.fit(x,y) #模型学习
p=m.predict([[2.5]]) #预测
print(p)
print(m.score(x,y)) #评估模型准确率
结果:
DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().
y = column_or_1d(y, warn=True)
[0]
0.8
六、基本遗传算法
用Python编程语言实现的基本遗传算法的程序如下:
# selection.py
from __future__ import division
import numpy as np
def selection(population,value):
#轮盘赌选择
fitness_sum=[ ]
for i in range(len(value)):
if i ==0:
fitness_sum.append(value[i])
else:
fitness_sum.append(fitness_sum[i-1]+value[i])
for i in range(len(fitness_sum)):
fitness_sum[i] += sum(value)
# 选择新种群
population_new = []
for i in range(len(value)):
rand = np.random.uniform(0, 1)
for j in range(len(value)):
if j == 0:
if 0 < rand and rand <= fitness_sum[j]:
population_new.append(population[j])
else:
if fitness_sum[j-1] < rand and rand <= fitness_sum[j]:
population_new.append(population[j])
return population_new
七、K-Means算法
现给定iris.data鸢尾花测量数据集,包括花瓣的长度和宽度、花萼的长度和宽度4类特征。鸢尾花有三个品种:setosa,versicolor,virginnica。使用K-Means算法对数据集样本进行品种聚类。
import pandas as pd
from sklearn.cluster import KMeans
import matplotlib.pyplot as plt
filename = 'iris.data'
data = pd.read_csv(filename, header=None)
# 生成k-means模型
X = data.iloc[:,0:4].values.astype(float) #提取数据集中的四个特征数据
kmeans = KMeans(n_clusters=3) #模型定义
kmeans.fit(X) #模型学习
print('kmeans.labels_:\n', kmeans.labels_) #输出聚类结果
pd.plotting.scatter_matrix(data, c=kmeans.labels_) #生成散点矩阵图观察聚类效果
plt.show( )
操作题
(一) 编程题
1、某电影公司有大量的未分类的影片,希望开发一套电影自动分类系统,根据每部电影中不同镜头类型出现的数量,来自动判断电影的类别。简单起见,假设电影类型为两类:“恐怖片"和"动作片”,每部电影的特征包括:“打斗镜头数量"和"夜场镜头数量”。为了验证模型有效性,需要基于下列样本数据(序号1-6),使用K近邻(KNN)算法构建一个分类模型,并预测样本(电影序号7)是什么类型。
import numpy as np
from sklearn import neighbors
#建立电影镜头和电影类型的训练数据集
x = np.array([[2,23],[5,28],[1,26],[89,10],[76,5],[71,2]]) #输入特征
y = np.array([1,1,1,2,2,2]) #标签。1表示恐怖片,2表示动作片
#建立KNN分类器模型
knn = neighbors.KNeighborsClassifier(n_neighbors=5)
#模型学习
knn.fit(x,y)
#使用KNN模型对测试样本进行预测
p = knn.predict([[70,6]])
print(p)
[2]
2、某品牌电视厂家为了提高其电视销量,在电视购物、微信公众、网络直播三个渠道进行推广,其中1-5月的广告费用及销量的数据如下表所示。假设6月份在三个渠道的广告费用预算分别为130.1万元、87.8万元、69.2万元,使用线性回归模型预测6月份的销量情况。
机器学习算法之线性回归算法(Linear Regression)
import numpy as np
#基于sklearn.linear_model库建立线性回归模型
from sklearn.linear_model import LinearRegression #导入线性回归模型
# 建立广告费用及销量的训练数据集(1-5月数据)
x = np.array([[229.5, 32.6, 69.1], [44.5, 38.8, 44.9],
[17.8, 46.2, 68.2], [162.1, 40.9, 57.4], [187.9, 10.7, 57.7]]) # 输入特征:广告费用
y = np.array([221000, 140000, 93000, 185000, 129000]) # 输出目标:销量
print(x, y)
# 建立测试数据(6月数据)
new_X = np.array([[130.1, 87.8, 69.2]]) # 输入特征:广告费用
print("6月广告投入:", new_X)
linear = LinearRegression()
linear.fit(x, y.reshape(-1,1))
pre_Y = linear.predict(new_X)
print("6月预期销售:",pre_Y)
[[229.5 32.6 69.1]
[ 44.5 38.8 44.9]
[ 17.8 46.2 68.2]
[162.1 40.9 57.4]
[187.9 10.7 57.7]] [221000 140000 93000 185000 129000]
6月广告投入: [[130.1 87.8 69.2]]
6月预期销售: [[291513.79628093]]
(二) 方案设计题
1、设计要求:现有一组学生数据,分别属于5个不同的班级。同学之间关系的友好程度可以通过微信聊天次数来衡量,同班同学的聊天次数多于不同班之间的聊天次数。当前已知10名同学分别来自5个班,请选择适当的机器学习算法,设计方案分析剩余学生们的分班情况。(在C:\KS\Answer.docx文件中撰写答案并保存)
2、设计要求:现有一组多个景区的照片,每张照片均标注了拍摄时间、地点以及观测到的PM2.5浓度。请使用深度学习的方法,选用适当的神经网络,设计一种基于照片预测PM2.5浓度的方案。(在C:\KS\Answer.docx文件中撰写答案并保存)
(三) 论述题
1、使用深度学习技术处理图像,通常使用卷积神经网络而不使用全连接网络,原因是什么?(在C:\KS\Answer.docx文件中撰写答案并保存)
2、深度学习中参数初始化方法有哪些,适用范围是什么?(在C:\KS\Answer.docx文件中撰写答案并保存)