深度学习_一元线性回归实例_python实现 VS numpy实现 VS tensorflow数据可视化

一元线性回归

一:机器学习基础

1.什么是机器学习?

从数据中学习

  • 建立模型
  • 学习模型
  • 预测房价
2.机器学习分类

监督学习 (Supervised Learning)

  • 通过对数据的学习,寻找属性和标记之间的映射关系
  • 回归(regression): 预测连续值
  • 分类(classification): 预测离散值

模型

无监督学习 (Unsupervised Learning)

  • 在样本数据没有标记的情况下,挖掘出数据内部蕴含的关系
  • 聚类:把相似度高的样本聚合在一起

半监督学习 (Semi-Supervised Learning)

  • 将有监督学习和无监督学习相结合,综合使用大量的没有标记数据和少量有标记的数据共同进行学习

二:一元线性回归

1.模型

模型:y = wx + b

模型变量:x

w:权重(weights)

b:偏置值

2.最佳拟合直线

最佳拟合直线

3.损失函数/代价函数(cost function)

损失函数

4.求最值问题

最值问题

三:一元线性回归实例

问题导入
实例

1.python实现
# python实现房屋销售预测实例

#加载样本数据
x = [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]
y = [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]

meanX = sum(x)/len(x)   #x平均数
meanY = sum(y)/len(y)   #y平均数

sumXY = 0
sumX = 0
for i in range(len(x)):
    sumXY += (x[i]-meanX)*(y[i]-meanY)
    sumX += (x[i]-meanX)*(x[i]-meanX)
    
w = sumXY / sumX
b = meanY - w*meanX

print(type(w),type(b),"\n")

print("w = ",w,"\nb = ",b,"\n")

#预测房价
x_test = [128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00]

print("面积\t预测价格")
for i in range(len(x_test)):
    print(x_test[i],"\t",round(w*x_test[i]+b,2)) #round保留两位小数
<class 'float'> <class 'float'> 

w =  0.8945605120044221 
b =  5.410840339418002 

面积	预测价格
128.15 	 120.05
45.0 	 45.67
141.43 	 131.93
106.27 	 100.48
99.0 	 93.97
53.84 	 53.57
85.36 	 81.77
70.0 	 68.03
2.numpy实现
# numpy实现房屋销售预测实例
import numpy as np

x = np.array([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])
y = np.array([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])

meanX = np.mean(x)
meanY = np.mean(y)

sumXY = np.sum((x-meanX)*(y-meanY))
sumX = np.sum((x-meanX)*(x-meanX))

w = sumXY/sumX
b = meanY-w*meanX

print(type(w),type(b),"\n")

print("权值:w = ",w,"\n偏置值:b = ",b,"\n")

#预测房价
x_test = np.array([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_test = w*x_test+b

print(y_test)

print("\n面积\t预测价格")
for i in range(len(x_test)):
    print(x_test[i],"\t",round(y_test[i],2)) #round保留两位小数
<class 'numpy.float64'> <class 'numpy.float64'> 

权值:w =  0.894560512004422 
偏置值:b =  5.410840339418002 

[120.04876995  45.66606338 131.92853355 100.47578595  93.97233103
  53.57397831  81.77052564  68.03007618]

面积	预测价格
128.15 	 120.05
45.0 	 45.67
141.43 	 131.93
106.27 	 100.48
99.0 	 93.97
53.84 	 53.57
85.36 	 81.77
70.0 	 68.03
3.tensorflow实现
# tensorflow实现房屋销售预测实例
import tensorflow as tf
import numpy as np

x = 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])
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])

meanX = tf.reduce_mean(x)
meanY = tf.reduce_mean(y)

sumXY = tf.reduce_sum((x-meanX)*(y-meanY))
sumX = tf.reduce_sum((x-meanX)*(x-meanX))
                     

w = sumXY/sumX
b = meanY-w*meanX

print(type(w),type(b))

print("权值:w = ",w,"\n偏置值b = ",b,)
print("线性模型:y=",w.numpy(),"x+",b.numpy())

x_test = np.array([128.15,45.00,141.43,106.27,99.00,53.84,85.36,70.00])
y_pred = (w*x_test+b).numpy()

print("\n面积\t预测价格")
for i in range(len(x_test)):
    print(x_test[i],"\t",round(y_pred[i],2)) #round保留两位小数
<class 'tensorflow.python.framework.ops.EagerTensor'> <class 'tensorflow.python.framework.ops.EagerTensor'>
权值:w =  tf.Tensor(0.8945604, shape=(), dtype=float32) 
偏置值b =  tf.Tensor(5.4108505, shape=(), dtype=float32)
线性模型:y= 0.8945604 x+ 5.4108505

面积	预测价格
128.15 	 120.05
45.0 	 45.67
141.43 	 131.93
106.27 	 100.48
99.0 	 93.97
53.84 	 53.57
85.36 	 81.77
70.0 	 68.03
4.matplotlib数据可视化
import matplotlib.pyplot as plt

plt.rcParams['font.sans-serif']=['SimHei']   #中文字体配置
plt.rcParams['axes.unicode_minus']=False  #符号显示

plt.figure()

plt.scatter(x,y,color='red',label='销售记录')
plt.scatter(x_test,y_pred,color='blue',label='预测房价')
plt.plot(x_test,y_pred,color='green',label='拟合直线',linewidth=2)

plt.xlabel("面积(平方米)",fontsize=14)
plt.ylabel("价格(万元)",fontsize=14)

plt.xlim((40,150))
plt.ylim((40,150))

plt.suptitle("商品房销售价格评估系统",fontsize=20)

plt.legend(loc="upper left")
plt.show()

一元线性回归

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很高兴回答您的问题!本文将重点介绍如何使用tensorflow和sklearn实现线性回归,并比较两种方法的优缺点。 一、线性回归介绍 线性回归是一种基本的机器学习算法,用于预测一个连续的数值。它是一种监督学习算法,需要有一个训练集来训练模型。在线性回归中,我们假设目标变量与自变量之间是线性关系,因此我们尝试找到一条最佳拟合直线来描述它们之间的关系。 二、使用tensorflow实现线性回归 TensorFlow是一个由Google开发的开源机器学习框架,它具有高效、灵活和易于使用的特点,广泛应用于各个领域。下面我们将介绍如何使用TensorFlow实现线性回归。 1、导入库 ``` import tensorflow as tf import numpy as np import matplotlib.pyplot as plt ``` 2、生成数据 为了演示线性回归,我们需要生成一些数据。我们将生成一个简单的数据集,其中有100个随机数,分别作为X和Y。 ``` X = np.random.rand(100).astype(np.float32) Y = X * 0.1 + 0.3 ``` 3、定义模型 在TensorFlow中,我们需要定义一个计算图来描述我们的模型。在本例中,我们将使用一个简单的线性模型 y = wx + b,其中w和b是我们需要学习的参数。 ``` w = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) b = tf.Variable(tf.zeros([1])) y = w * X + b ``` 4、定义损失函数 我们需要定义一个损失函数来衡量模型的性能。在本例中,我们将使用均方误差作为损失函数。 ``` loss = tf.reduce_mean(tf.square(y - Y)) ``` 5、定义优器 我们需要定义一个优器来最小损失函数。在本例中,我们将使用梯度下降优器。 ``` optimizer = tf.train.GradientDescentOptimizer(0.5) train = optimizer.minimize(loss) ``` 6、训练模型 我们需要训练模型来学习参数w和b。在本例中,我们将使用1000次迭代来训练模型。 ``` init = tf.global_variables_initializer() sess = tf.Session() sess.run(init) for step in range(1000): sess.run(train) if step % 100 == 0: print(step, sess.run(w), sess.run(b)) ``` 7、可结果 我们可以使用matplotlib库来可模型的结果。 ``` plt.plot(X, Y, 'ro', label='Original data') plt.plot(X, sess.run(w) * X + sess.run(b), label='Fitted line') plt.legend() plt.show() ``` 三、使用sklearn实现线性回归 scikit-learn是一个流行的Python机器学习库,提供了许多常用的算法和工具。现在我们将介绍如何使用scikit-learn实现线性回归。 1、导入库 ``` import numpy as np import matplotlib.pyplot as plt from sklearn.linear_model import LinearRegression ``` 2、生成数据 我们使用与上面相同的数据集。 ``` X = np.random.rand(100, 1) Y = X * 0.1 + 0.3 ``` 3、定义模型 在scikit-learn中,我们需要实例一个线性回归模型。 ``` model = LinearRegression() ``` 4、训练模型 我们可以使用fit()方法来训练模型。 ``` model.fit(X, Y) ``` 5、可结果 我们可以使用matplotlib库来可模型的结果。 ``` plt.plot(X, Y, 'ro', label='Original data') plt.plot(X, model.predict(X), label='Fitted line') plt.legend() plt.show() ``` 四、对比两种方法的优缺点 使用TensorFlow实现线性回归的优点: 1. TensorFlow是一个灵活的框架,可以轻松地实现各种机器学习算法。 2. TensorFlow提供了高效的计算图实现,可以利用GPU进行加速。 3. TensorFlow具有良好的可工具,可以帮助我们更好地理解和调试模型。 使用TensorFlow实现线性回归的缺点: 1. TensorFlow需要对TensorFlow的基本原理有一定的了解,对初学者来说可能有一定的难度。 2. TensorFlow的语法相对较为复杂,需要花费一些时间来学习和理解。 3. TensorFlow需要编写大量的代码来实现模型,相对于scikit-learn可能稍微繁琐一些。 使用scikit-learn实现线性回归的优点: 1. scikit-learn是一个简单易用的Python机器学习库,可以快速实现各种机器学习算法。 2. scikit-learn提供了大量的实用工具和函数,可以帮助我们更好地处理数据和调试模型。 3. scikit-learn的语法相对较为简单,对初学者来说比较友好。 使用scikit-learn实现线性回归的缺点: 1. scikit-learn的灵活性相对较低,不如TensorFlow那么灵活。 2. scikit-learn的计算效率可能比TensorFlow略低。 3. scikit-learn的可工具相对较少,不如TensorFlow那么强大。 以上就是使用TensorFlow和scikit-learn实现线性回归的方法和比较。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值