第9讲 回归问题
机器学习:数据中学习,拟合模型
学习算法:数据中产生模型的算法
步骤:建立模型——学习模型——预测识别
监督学习 | 无监督学习 | 半监督学习 |
对数据学习,寻找属性和标记之间的映射关系 | 样本未标记,挖掘数据间的关系 | 二者的结合,大量无标记的数据和少量有标签的数据共同学习 |
数据集/样本集:用来学习的数据的集合 记录:样本 属性:特征 标记:分类的结果 模型——估计函数 规律——真相/真实
|
聚类:样本相似度高的样本 距离:特征值相似度
|
|
回归——预测连续值 分类——预测离散值 |
1关于人工智能和机器学习,下面描述中错误的是______。
A.人工智能等价于机器学习
B.机器学习的主要研究内容,就是如何从数据中学习和产生模型
C.从数据中产生模型的算法,称为学习算法
D.人工智能的发展经历了逻辑推理、专家系统、和机器学习三个阶段
正确答案:A
2关于监督学习,下列描述中错误的是______。
A.监督学习是对有标签数据集进行学习
B.监督学习可以分为回归和分类
C.在回归问题中,预测的是一个连续值
D.聚类是一种典型的监督学习
正确答案:D
3关于数据集,下列说法中错误的是______。
A.数据集中的每一条记录称为样本
B.属性反映样本的表现或性质
C.属性也称为特征
D.样本中一定包括属性和标记
正确答案:D
4机器学习,就是从数据中学习。它通过算法使机器能从大量数据中学习规律,从而能够对新的样本做出智能识别,或对未来做出预测。
A.对
B.错
正确答案:A
5半监督学习是一种将有监督学习和无监督学习相结合的学习方法,它可以综合使用大量的没有标记数据和少量的有标记的数据来共同进行学习。
A.对
B.错
正确答案:A
6无监督学习是在样本数据没有标记的情况下,挖掘出数据内部蕴含的关系。
A.对
B.错
正确答案:A
y=wx+b 一元线性回归 |
w权重 b偏置值 |
|
拟合误差/残差 | 最佳拟合直线的情况是残差累计值最小 |
采用绝对值可以消除残差+-的影响 采用平方和消除理解,无意义 |
损失函数/代价函数
|
估量模型的预测值与真实值之间的不一致程度 | 非负 与误差变化一致 单调有界收敛于0 |
平方损失函数 | 意义:欧式距离 | |
衡量误差 最小二乘法 |
基于均方误差最小化求解 | 求极值——loss最小——极值点偏导为0 解析解(封闭解/闭合解) |
1下列说法中不正确的是______。
A.最佳拟合直线应该使得所有点的残差累计值最小
B.损失函数用来估量模型的预测值与真实值的不一致程度
C.损失函数和代价函数是不同的
D.损失函数的值应该是一个非负的实值
正确答案:C
2解析解是指通过严格的公式推到和计算所求得的解。
A.对
B.错
正确答案:A
3拟合出的最优曲线应该经过每一个给定数据点。
A.对
B.错
正确答案:B
解题步骤:
1.加载样本x,y
2.学习模型:计算w,b
根据解析解公式计算w,b(python方法,numpy方法,张量方法)数据类型不同,则精度不同
3.预测值 y'=wx+b
4.模型可视化
1下列说法错误的是______。
A.Python列表不能够实现数组高效运算
B.Numpy和TensorFlow均支持对多维数组的高效运算
C.Numpy不仅支持CPU运算,还支持TPU和GPU的高效运算
D.Tensorflow提供了快速搭建复杂模型的高阶API
正确答案:C
2采用下列方式定义x后,注释中对x的数据类型描述错误的是______。
A.x = [1, 3, 5, 7, 9] # x是Python列表
B.x = np.array([1, 3, 5, 7, 9] ) # x是NumPy数组
C.x = tf.constant(np.array([1, 3, 5, 7, 9])) # x是NumPy数组
D.x = tf.constant([1, 3, 5, 7, 9]) # x是TensorFlow张量
正确答案:C
3下列程序的执行结果为______。
import numpy as np
a = np.array([3, 2, 4])
b = 2
np.sum(a*b)
A.array([6, 4, 8])
B.18
C.运行报错
D.array([5, 4, 6])
正确答案:B
4Tensorflow和Numpy中默认的浮点数类型分别为______。
A.float32 float64
B.float64 float32
C.float32 float32
D.float64 float64
正确答案:A
5执行下列代码后,得到的结果是______。
import numpy as np
a=120.04876995
print(np.round(a, 3))
A.120.049
B.120.05
C.120.050
D.120.0488
正确答案:A
6运行下列程序,以下说法中正确的是______。
import numpy as np
import tensorflow as tf
a=np.array([1,2,3])
b=tf.constant([2])
c=a-b
d=tf.add(a,b)
e=b.numpy()
A.a是NumPy数组,b,c,d,e都是TensorFlow张量
B.b是TensorFlow张量,其他都是NumPy数组
C.a,b,c,d,e中有3个NumPy数组
D.a,b,c,d,e中有3个TensorFlow张量
正确答案:D
多元线性回归:两个或两个以上变量,多个影响因素,线性关系——超平面,直线在高维空间的推广
1下列关于多元线性回归的说法中,错误的是______。
A.多元线性回归模型中包含两个或着两个以上的自变量
B.多元线性回归模型对应高维空间中的一个超平面
C.多元线性回归中的因变量和自变量是线性关系
D.多元线性回归模型可能对应一个曲面
正确答案:D
步骤:
1.加载样本数据
2.数据处理
4.预测数据
1下列Numpy数组运算函数中,______是求解矩阵转置的函数。
A.np.matmul()
B.np.stack()
C.np.linalg.inv()
D.np.transpose()
正确答案:D
2执行下列程序段, 运行结果是_____。
import numpy as np
x1 = np.array([132.84, 104.50, 79.42, 56.44, 224.87])
x2 = np.array([3, 2, 2, 1, 3])
x0 = np.ones(len(x1))
y = np.array([145.32, 89.72, 80.44, 46.77, 200.34])
X = np.stack((x0, x1, x2), axis = 1)
Y = np.array(y).reshape(-1, 1)
X.shape, Y.shape
A.((5, 3),(5, 1))
B.((3, 5),(5, 1))
C.((5, 3),(5, ))
D.((3, 5),(5, ))
正确答案:A
3下列NumPy代码中,_____可以求出(向量相乘)。
A.np.matmul(X,np.transpose(X))
B.np.matmul( np.linalg.inv(X), X)
C.np.matmul(np.transpose(X), X)
D.np.transpose(X)*X
正确答案:C
1.绘制三维图形
2.内置于Matplotlib
3.Figure对象
4.Axes3d对象
散点图:ax3d.scatter(x,y,z,c='b',marker="*")
平面图:ax3d.plot_surface(X,Y,Z,cmap="rainbow")
线框图:ax3d.plot_wireframe(X,Y,Z,color="m",linewidth=0.5)
1下列说法中错误的是_____。
A.多元线性回归模型对应高维空间中的一个超平面
B.机器学习就是从大量数据中学习规律,从而能够做出智能识别或预测
C.在一元线性回归中包含两个或者两个以上的自变量
D.损失函数用来估量模型的预测值与真实值的不一致程度
2下列说法中错误的是_____。
A.机器学习可以分为监督学习、非监督学习以及半监督学习
B.监督学习包括对有标签和无标签样本的学习
C.半监督学习是一种将有监督学习和无监督学习相结合的学习方法
D.无监督学习是在样本数据没有标记的情况下,挖掘出数据内部蕴含的关系
3下列说法中错误的是_____。
A.损失函数的值应该是一个非负的实值
B.最佳拟合直线应该使得所有点的残差累计值最小
C.损失函数用来估量模型的预测值与真实值的不一致程度
D.最佳拟合直线应该经过每一个样本点
4下列程序的执行结果为_____。
import tensorflow as tf
a = tf.constant([1, 3, 5])
b = 2
c = tf.reduce_sum(a+b)
c.numpy()
得分/总分
A.运行报错
B.15
C.5
D.18
5执行下列代码后,得到的结果是_____。
X=1/3
print(round(X, 2))
A.0.33
B.0.34
C.0
D.0.33333333333
6执行下列函数后,得到的结果是_____。
import numpy as np
X0=np.ones(3)
X1=np.zeros(3)
X2=np.array([1,2,3])
X=np.stack((X0,X1,X2), axis=1)
print(X)
A.[[1,0,1],[2,0,1],[3,2,1]]
B.[[1,1,1],[0,0,0],[1,2,3]]
C.[[1,0,1],[1,0,2],[1,0,3]]
D.[[1,2,3],[0,0,0],[1,1,1]]
7运行下列程序,关于a,b,c,d,e的数据类型,以下中正确的是_____。
import numpy as np
import tensorflow as tf
a=np.array([1,2,3])
b=2
c=a+b
d=tf.add(a,1)
e=c+d
A.a,b,c,d,e中有2个TensorFlow张量
B.a,b,c,d,e中有1个NumPy数组
C.a,b,c,d,e中有1个TensorFlow张量
D.a,b,c,d,e中有3个NumPy数组
8执行下面的程序段后,数组c的形状是:_____。
import numpy as np
a=np.arange(5).reshape(-1,1)
b=a+1
c=b.reshape(-1)
c.shape
A.(5, 1)
B.(1, 5)
C.(5,2)
D.(5, )
9下列程序段的运行结果为_____。
import numpy as np
A = np.array([[2, 3], [2, 1]])
B = np.array([[2, 0], [1, 2]])
X = A * B
Y = np.matmul(A, B)
print("X:\n", X)
print("Y:\n", Y)
得分/总分
A.X:
[[7 6]
[2 2]]
Y:
[[4 0]
[5 2]]
B.X:
[[4 0]
[2 2]]
Y:
[[7 6]
[5 2]]
C.X:
[[7 6]
[5 2]]
Y:
[[4 0]
[2 2]]
D.X:
[[7 0]
[2 2]]
Y:
[[4 6]
[5 2]]
10解析解是指通过严格的公式推到和计算所求得的解。
A.错
B.对
from matplotlib import markers import matplotlib.pyplot as plt from mpl_toolkits.mplot3d import Axes3D import numpy as np import tensorflow as tf import math as math #设置中文编码 plt.rcParams['font.sans-serif']=['SimHei'] #判断字符串是小数 def IsFloatNum(str): s=str.split('.') if len(s)>2: return False else: for si in s: if not si.isdigit(): return False return True #加载数据 x1=tf.constant([137.97,104.50,100.00,124.32,79.20,99.00,124.00,114.00, 106.69,138.05,53.75,46.91,68.00,63.02,81.26,86.21]) x2=tf.constant([3,2,2,3,1,2,3,2,2,3,1,1,1,1,2,2],dtype=tf.float32) y=tf.constant([145.00,110.00,93.00,116.00,65.32,104.00,118.00,91.00, 62.00,133.00,51.00,45.00,78.50,69.65,75.69,95.30]) print(x1.shape,"\t",x2.shape,"\t",y.shape) #数据处理 x0=tf.ones(len(x1)) X=tf.stack((x0,x1,x2),axis=1) Y=tf.reshape(y,(-1,1)) #求解模型参数 Xt=tf.transpose(X)#计算X' XtX_1=tf.linalg.inv(tf.matmul(Xt,X)) #计算(X'X)-1 XtX_1_Xt=tf.matmul(XtX_1,Xt) #计算(X'X)-1X' W=tf.matmul(XtX_1_Xt,Y) #计算((XX)-1)XY W=tf.reshape(W,-1); print("多元线性回归方程:") print("Y=",W[1].numpy(),"*x1+",W[2].numpy(),"*x2+",W[0].numpy) y_pred=W[1]*x1+W[2]*x2+W[0] X1,X2=tf.meshgrid(x1,x2) Y_PRED=W[0]+W[1]*X1+W[2]*X2 print(X1.shape) print(X2.shape) print((W[1]*X1).shape) fig=plt.figure(figsize=(8,6)) ax3d=Axes3D(fig) #散点图 ax3d.scatter(x1,x2,y,color="g",marker="*",label="销售记录") ax3d.scatter(x1,x2,y_pred,color="r",label="预测房价") #平面图 ax3d.plot_wireframe(X1,X2,Y_PRED,color='c',linewidth=0.5,label="拟合平面") ax3d.set_xlabel("房屋面积",color="r",fontsize=14) ax3d.set_ylabel("房屋数",color="r",fontsize=14) ax3d.set_zlabel("销售价格",color="r",fontsize=14) ax3d.set_zlim3d(30,160) ax3d.set_yticks([1,2,3]) plt.suptitle("商品房销售回归买模型",fontsize=20) plt.legend(loc="upper left") plt.show() #预测房价 while 1 : print("请输入房屋面积和房间数,预测房屋销售价格:") x1_test=(input("商品房面积:")) if not IsFloatNum(x1_test): print("输入数据类型错误") continue if float(x1_test)>500 or float(x1_test)<20: print("输入数据范围不合理") continue x2_test=(input("房间数:")) if not x2_test.isdigit(): print("输入数据类型错误") continue if int(x2_test)>10 or int(x2_test)<1: print("输入数据范围不合理") continue else: break x1_test=float(x1_test); x2_test=int(x2_test); y_pred=W[1]*x1_test+W[2]*x2_test+W[0] print("预测价格:",tf.round(y_pred,2).numpy(),"万元")