突发!员工跳楼!只拿低保工资!央企设计院集体罢工!

突发!北京某院集体罢工!

淄博向东,惠泊向西:在人民与人民币之间,惠泊停车选择了人民币

【少儿禁】马建《亮出你的舌苔或空空荡荡》

10部适合女性看的唯美情色电影

生成图片,分享到微信朋友圈

自由微信安卓APP发布,立即下载! | 提交文章网址
查看原文

数据挖掘从入门到放弃(七):TensorFlow和keras实现线性回归LinearRegression

yzg 数据社 2022-07-01

从实践出发学习TensorFlow和teras机器学习框架,分别用tf和keras实现线性模型,两者区别在于前者相当于手推了线性回归模型,后者使用单层的感知机,很便捷。相同内容更新在:https://blog.csdn.net/yezonggang

使用TensorFlow(2.0)

需要自定义优化器、拟合函数等,如下:

from __future__ import absolute_import, division, print_functionimport tensorflow as tfimport numpy as nprng = np.random # Parameters.learning_rate = 0.01training_steps = 1000display_step = 50 # Training Data.X = np.array([1.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167,7.042,10.791,5.313,7.997,5.654,9.27,3.1])Y = np.array([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221,2.827,3.465,1.65,2.904,2.42,2.94,1.3]) # Weight and Bias, initialized randomly.# 手动设置权重w和偏置bW = tf.Variable(rng.randn(), name="weight")b = tf.Variable(rng.randn(), name="bias") # Linear regression (Wx + b).# 定义线性函数def linear_regression(x): return W * x + b # Mean square error.def mean_square(y_pred, y_true): return tf.reduce_mean(tf.square(y_pred - y_true)) # Stochastic Gradient Descent Optimizer.optimizer = tf.optimizers.SGD(learning_rate) # Optimization process. def run_optimization(): # Wrap computation inside a GradientTape for automatic differentiation. with tf.GradientTape() as g: pred = linear_regression(X) loss = mean_square(pred, Y) # Compute gradients. gradients = g.gradient(loss, [W, b]) # Update W and b following gradients. optimizer.apply_gradients(zip(gradients, [W, b])) # Run training for the given number of steps.# 开始训练,按照预定义的步长for step in range(1, training_steps + 1): # Run the optimization to update W and b values. run_optimization() if step % display_step == 0: pred = linear_regression(X) loss = mean_square(pred, Y) print("step: %i, loss: %f, W: %f, b: %f" % (step, loss, W.numpy(), b.numpy())) import matplotlib.pyplot as plt# Graphic display 画图看效果plt.plot(X, Y, 'ro', label='Original data')plt.plot(X, np.array(W * X + b), label='Fitted line')plt.legend()plt.show()

 这里说一下TensorFlow中求平均值函数reduce_mean(),可以定义按照行或者列求平均值等;

# tf中reduce函数计算均值tf.reduce_mean( input_tensor, axis=None, keep_dims=False, name=None, reduction_indices=None) # 举个例子:n的输出[1 5 6]m = np.array([(1,7,4),(2,3,9)])n=tf.reduce_mean(m,axis=0)print(m,n)

在TensorFlow中,梯度下降法GradientTape的使用:

#举个例子:计算y=x^2在x = 3时的导数: x = tf.constant(3.0)with tf.GradientTape() as g: g.watch(x) y = x * xdy_dx = g.gradient(y, x) # y’ = 2*x = 2*3 = 6 #GradientTape会监控可训练变量:with tf.GradientTape() as tape: predictions = model(images) loss = loss_object(labels, predictions)gradients = tape.gradient(loss, model.trainable_variables)

输出训练过程:

训练结果:;


使用keras

keras实现线性回归不用在意实现细节,定义一个感知机模型(单层网络)训练即可,如下:

import tensorflow as tfimport matplotlib.pyplot as plt%matplotlib inlineimport numpy as npimport pandas as pdimport seaborn as sns # X和Y的值X = np.array([1.3,4.4,5.5,6.71,6.93,4.168,9.779,6.182,7.59,2.167, 7.042,10.791,5.313,7.997,5.654,9.27,3.1])Y = np.array([1.7,2.76,2.09,3.19,1.694,1.573,3.366,2.596,2.53,1.221, 2.827,3.465,1.65,2.904,2.42,2.94,1.3]) data=pd.DataFrame(np.vstack((X,Y))).T # 两个array合并后转秩,才能得到一个dfdata.rename(columns={0:'data_input',1:'data_output'},inplace=True) # 队列名重命名print(data) # 画个图瞅瞅分布sns.scatterplot(x="data_input",y="data_output",data=data) # 定义顺序模型方法(装饰类),中间层即输出层1,输入层1,model=tf.keras.Sequential()model.add(tf.keras.layers.Dense(1,input_shape=(1,)))model.summary()# 设置优化器和损失函数model.compile(optimizer="adam",loss="mse")history=model.fit(x,y,epochs=500) # 画图看效果data_predict=model.predict(data.data_input)plt.plot(data.data_input,data.data_output, 'ro', label='Original data')plt.plot(data.data_input, data_predict, label='Fitted line')plt.legend()plt.show()

这里讲一下numpy.array和pd.dataframe的相互转换,一般py包中默认使用numpy作为基本的向量操作包,对于习惯使用pd.dataframe的人来说,要熟悉基本操作:

# 两个array合并后转秩,才能得到一个dfdata=pd.DataFrame(np.vstack((X,Y))).T # 熟练操作dataframe函数data.rename(columns={0:'data_input',1:'data_output'},inplace=True) # 随机生成dataframedf = pd.DataFrame(np.random.randint(70,100,(3,5)), index=["地区1", "地区2", "地区3"], columns=["北京","天津", "上海","沈阳", "广州"])

原始数据分布:


拟合的效果图:


历史好文推荐
  1. 数据分析为什么火了

  2. 如何入门数据分析?

  3. 你是分析师,还是“提数机”?

  4. 挖掘从入门到放弃(六):K-means 聚类


文章有问题?点此查看未经处理的缓存