Linear Regression
回归主要分为线性回归和逻辑回归。线性回归主要解决连续值预测问题,逻辑回归主要解决分类问题。
假定输入与输出之间有线性关系,给定样本x,假设其输出如下,还可以加上一个bias
loss function
选取的损失函数为MSE,即均方误差函数
文章图片
MSE 数据集
数据集是随便从网上搜了一个工作时间和薪水对应的csv文件,见下图
文章图片
代码部分
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from sklearn.model_selection import train_test_split
raw = pd.read_csv("../data/Salary_Data.csv")#X和Y是numpy.array类型
X = raw["YearsExperience"].values
Y = raw["Salary"].values#划分训练集和测试集
x_train,x_test,Y_train,Y_test = train_test_split(X,Y,test_size=0.3)##对x和y进行归一化
# x_train = (X_train -X_train.min())/(X_train.max()-X_train.min())
y_train = (Y_train - Y_train.min())/(Y_train.max()-Y_train.min())
# print(type(x_train))
y_test = (Y_test - Y_test.min())/(Y_test.max()-Y_test.min())
n_numbers = x_train.shape[0]x = tf.placeholder(dtype=tf.float32,name="x")
y = tf.placeholder(dtype=tf.float32,name="y")w = tf.get_variable("w",shape=[],initializer=tf.zeros_initializer)
b = tf.get_variable("b",shape=[],initializer=tf.zeros_initializer)pred = tf.multiply(w,x)+b###MSE作为损失函数
loss = tf.reduce_sum(tf.square(pred-y))/(2*n_numbers)optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
init_op =tf.initialize_all_variables()
epoches = 1000
display = 50
with tf.Session() as sess:
sess.run(init_op)
for i in range(epoches):
for (x_data,y_data) in zip(x_train,y_train):
sess.run(optimizer,feed_dict={x:x_data,y:y_data})
if (i+1) % display == 0:
print("after {} epoch of training,loss is {},w is {},b is {}".format(i,sess.run(loss,feed_dict={x:x_train,y:y_train}),sess.run(w),sess.run(b)))
plt.plot(x_train, y_train, 'ro', label='Original data')
plt.plot(x_train, sess.run(w) * x_train + sess.run(b), label='Fitted line')
plt.legend()
plt.show()##测试集
testing_cost = sess.run(tf.reduce_sum(tf.square(pred-y))/(2*n_numbers),feed_dict={x:x_test,y:y_test})
print("testing cost is {:.9f}".format(testing_cost))
plt.plot(x_test, y_test, 'bo', label='Testing data')
plt.plot(train_X, sess.run(w) * train_X + sess.run(b), label='Fitted line')
plt.legend()
plt.show()
v = tf.get_variable('v', shape=[1], initializer=tf.constant_initializer(1.0))
v = tf.Variable(tf.constant(1.0, shape=[1], name='v')
Linear Regression
回归主要分为线性回归和逻辑回归。线性回归主要解决连续值预测问题,逻辑回归主要解决分类问题。
假定输入与输出之间有线性关系,给定样本x
上一篇:【抽象代数】环论与域论