1 手写代码的单变量线性回归

用简单代码说清楚最小二乘法原理,代价函数,梯度下降等基本概念。


import numpy as np
import matplotlib.pyplot as plt# Prepare train data
train_X = np.linspace(-1, 1, 100)
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.33 + 10
w = 0
b = 0
for i in range(60000):det = 2*(train_Y - train_X*w -b)pasw = np.dot(train_X.T,det)pasb = sum(det)w = w + 0.001*paswb = b + 0.001*pasb
print(w,b)
plt.plot(train_X,train_Y,"+")
plt.plot(train_X,train_X.dot( w ) + b )
plt.show()

2 基于sklearn的单变量线性回归

from sklearn import linear_model
import matplotlib.pyplot as plt
import numpy as np
lr = linear_model.LinearRegression()
boston = datasets.load_boston()
y = boston.target# cross_val_predict returns an array of the same size as `y` where each entry
# is a prediction obtained by cross validation:
predicted = cross_val_predict(lr, boston.data, y, cv=20)
W = np.column_stack( (y, predicted) )
#print( W )fig, ax = plt.subplots()
ax.scatter(y, predicted)
ax.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=4)
ax.set_xlabel('Measured')
ax.set_ylabel('Predicted')
plt.show()

(略去运算结果)

3 基于tensorflow的单变量线性回归

import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt# Prepare train data
train_X = np.linspace(-1, 1, 100)
train_Y = 2 * train_X + np.random.randn(*train_X.shape) * 0.33 + 10# Define the model
X = tf.placeholder("float")
Y = tf.placeholder("float")
w = tf.Variable(0.0, name="weight")
b = tf.Variable(0.0, name="bias")
loss = tf.square( Y - X*w - b )
train_op = tf.train.GradientDescentOptimizer(0.001).minimize(loss)# Create session to run
with tf.Session() as sess:sess.run(tf.initialize_all_variables())epoch = 1for i in range(100):for (x, y) in zip(train_X, train_Y):_, w_value, b_value = sess.run([train_op, w, b],feed_dict={X: x,Y: y})print("Epoch: {}, w: {}, b: {}".format(epoch, w_value, b_value))epoch += 1#draw
plt.plot(train_X,train_Y,"+")
plt.plot(train_X,train_X.dot(w_value)+b_value)
plt.show()

运算结果:

基于pandas的代码

# 一、导入所需库
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号# 二、构造矩阵data = pd.read_csv("linear_regression.csv")
data.insert(0,'ones',1)
n = data.shape[1]
x = data.iloc[:,:n-1]
y = data.iloc[:,n-1:]x = np.matrix(x)
y = np.matrix(y)
w = np.array([0,0]).reshape(1,2)# 三、构造目标函数、损失函数、代价函数#其实不需要写 在代价函数中有体现 我只是拿来复习一下理论知识
def obiect_function(x,w):''':param x: 特征矩阵:param w: 权重矩阵:return: 返回目标函数的值'''return x*w.T#其实不需要写 在代价函数中有体现 我只是拿来复习一下理论知识
def loss_function(x,y,w):''':param x:特征矩阵一个样本值:param w: 权重矩阵:param y: 对应x的实际值:return: 返回一个样本的损失函数值'''return x*w.T-y#代价函数 也是梯度下降要针对的函数
def cost_function(x,y,w):''':param x: 特征矩阵:param w: 权重矩阵:param y: 实际值矩阵:return: 返回代价函数的值'''#一共有m个样本m = x.shape[0]return np.sum(np.power(x*w.T-y,2))/(2*m)
# 四、梯度下降
def gradient_descent(x,y,w,alpha,iters):''':param x: 特征矩阵:param y: 实际值:param w: 权重矩阵:param alpha: 步长:param iters: 迭代次数:return: 返回迭代之后的权重矩阵w和每次迭代之后的代价函数的值组成的数组cost'''temp = np.zeros(w.shape)x_len = x.shape[0]w_len = w.shape[1]cost = np.zeros(iters)for i in range(iters):error = x*w.T-yfor j in range(w_len):temp[0,j] =w[:,j] - sum(np.multiply(error,x[:,j]))*(alpha/x_len)w = tempcost[i] = cost_function(x,y,w)return w,costalpha = 0.01
iters = 1000
w,cost = gradient_descent(x,y,w,alpha,iters)# 五、绘制预测收益和实际收益图
# plt.figure(figsize=(12,8))
# plt.scatter(data["人口"],data['收益'],label = '实际值')
# plt.xlabel("人口")
# plt.ylabel("收益")
# plt.title("人口收益预测模型图")
#
# c = np.linspace(min(data["人口"]),max(data['人口']),100)
# f = [w[0,0]+w[0,1]* i for i in c]
#
# plt.plot(c,f,label = "预测模型",color = "r")
# plt.legend()
# plt.show()# 六、绘制迭代次数和代价函数关系图
plt.plot(range(1,iters+1),cost,label = '迭代次数和代价函数关系')
plt.xlabel("迭代次数")
plt.ylabel('代价函数')
plt.title('迭代次数和代价函数关系图')
plt.legend()
plt.show()

机器学习系列1:单变量线性回归相关推荐

  1. Coursera公开课笔记: 斯坦福大学机器学习第二课“单变量线性回归(Linear regression with one variable)”

    Coursera公开课笔记: 斯坦福大学机器学习第二课"单变量线性回归(Linear regression with one variable)" 发表于 2012年05月6号 由 ...

  2. 斯坦福大学机器学习第二课 “单变量线性回归”

    斯坦福大学机器学习第二课"单变量线性回归(Linear regression with one variable)" 发表于 2012年05月6号 由 52nlp 斯坦福大学机器学 ...

  3. 机器学习-代价函数(单变量线性回归)

    机器学习-代价函数(单变量线性回归) 2.1函数表示 因为只含有一个特征/输入变量,所以这样的问题叫作单变量线性回归问题. 回归问题: 构建一个模型,也许是条直线,从这个数据模型上看,如果你朋友的房子 ...

  4. 吴恩达机器学习笔记 1单变量线性回归

    机器学习 (小白通俗理解) 机器学习包括监督学习和无监督学习 监督学习 首先,监督学习,我们所给的数据集由正确答案组成,计算机根据正确数据集对未知样本进行结果预测 无监督学习 无监督学习,所给数据集并 ...

  5. 机器学习门户网站——单变量线性回归

    线性回归的概念.在高中的数学书出现了. 给你一些样本点,怎样找出一条直线,使得最逼近这些样本点. 给出一个样例:如果 x 是房子面积,y是房子价格.确定一条直线须要theta0和theta1. 给出x ...

  6. 吴恩达机器学习(一)单变量线性回归(假设函数、代价函数、梯度下降)

    目录 0. 前言 1. 假设函数(Hypothesis) 2. 代价函数(Cost Function) 3. 梯度下降(Gradient Descent) 学习完吴恩达老师机器学习课程的单变量线性回归 ...

  7. python装饰器带参数函数二阶导数公式_机器学习【二】单变量线性回归

    吴恩达机器学习笔记整理--单变量线性回归 通过模型分析,拟合什么类型的曲线. 一.基本概念 1.训练集 由训练样例(training example)组成的集合就是训练集(training set), ...

  8. 【Machine Learning 二】单变量线性回归,代价函数,梯度下降

    吴恩达机器学习笔记整理--单变量线性回归 通过模型分析,拟合什么类型的曲线. 一.基本概念 1.训练集 由训练样例(training example)组成的集合就是训练集(training set), ...

  9. 机器学习入门系列一(关键词:单变量线性回归,梯度下降法)

    机器学习入门系列一(关键词:单变量线性回归,梯度下降法) 如上图所示,我们的目标是希望通过这些数据得到城市人口数和利润可能的对应关系,并可以通过城市人口数(利润)来预测它的利润(城市人口数),在这里我 ...

最新文章

  1. NCEPU:线下组队学习周报(008)
  2. 蔚来李斌:自动驾驶好处是解放生产力、保障生命安全
  3. 如何安装altium designer 10
  4. python实现文件下载-Python实现http文件下载
  5. Windows Hook
  6. 在.Net Core WebAPI下给Swagger增加导出离线文档功能
  7. mysql存储过程并行_Mysql存储过程的执行顺序问题
  8. arguments对象
  9. 【MyBatis笔记】日志
  10. 计算机组装故障排除方法,计算机组装 常见的硬件故障及排除方法
  11. 【unity地编】unity制作场景的流程和要点简要
  12. 再见python你好go语言_再见,Python!你好,Go语言
  13. secureCRT命令行字符重叠只显示一半
  14. 操作系统课程项目 OS project —— Pintos from Project 1 to Project 3
  15. mysql实现宠物类型的查询_JDBC实战案例--利用jdbc实现的宠物信息管理系统
  16. 2018省赛第九届蓝桥杯真题C语言B组第八题题解 日志统计
  17. 人脸表情识别系统介绍——上篇(python实现,含UI界面及完整代码)
  18. Web前端:改变鼠标样式
  19. oracle-数据库被注入恶意攻击程序的案例恢复
  20. LeetCode知识点总结 - 606

热门文章

  1. 文巾解题 1711. 大餐计数
  2. 文巾解题 181. 超过经理收入的员工
  3. 中兴服务器raid配置_-服务器Raid卡更换后如何恢复硬盘Raid组信息
  4. LeetCode-剑指 Offer 53 - I. 在排序数组中查找数字 I
  5. 基于DOS命令打war包
  6. 【android4.3】记一次完整的android源码截屏事件的捕获(不同于网上的老版本)
  7. 调试应用不发愁,免安装的 curl 来帮忙
  8. 是时候抛弃web.xml了?
  9. Java 授权内幕--转载
  10. Linux环境进程间通信(二): 信号--转载