手写线性回归

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression
X = np.linspace(2,10,20).reshape(-1,1)
y = np.random.randint(1,6,size = 1)*X + np.random.randint(-5,5,size = 1)
#噪声 加盐
y += np.random.randn(20,1)*0.8
plt.scatter(X,y,color = "red")w = lr.coef_[0,0]
b = lr.intercept_[0]
print(w,b)
plt.scatter(X,y)
x = np.linspace(1,11,50)
plt.plot(x,w*x + b,color= "green")

结果:

2.995391527138711 1.9801931425932864
import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegressionX = np.linspace(2, 10, 20).reshape(-1,1)
# f(x) = wx + b
y = np.random.randint(1, 6, size=1)*X + np.random.randint(-5, 5, size=1)
# 噪声,加盐
y += np.random.randn(20, 1)*0.8plt.scatter(X, y, color = 'red')w = lr.coef_[0, 0]
b = lr.intercept_[0]x = np.linspace(1, 11, 50)
plt.plot(x, w*x + b, color='green')# 使用梯度下降解决一元一次的线性问题:w,b
class LinearModel(object):def __init__(self):self.w = np.random.randn(1)[0]self.b = np.random.randn(1)[0]# 数学建模:将数据X和目标值关系用数学公式表达def model(self,x):#model 模型,f(x) = wx + breturn self.w*x + self.bdef loss(self,x,y):#最小二乘cost = (y - self.model(x))**2# 梯度就是偏导数,求解两个未知数:w,bgradient_w = 2*(y - self.model(x))*(-x)gradient_b = 2*(y - self.model(x))*(-1)return cost,gradient_w,gradient_b# 梯度下降def gradient_descent(self,gradient_w,gradient_b,learning_rate = 0.1):# 更新w,bself.w -= gradient_w*learning_rateself.b -= gradient_b*learning_rate# 训练fitdef fit(self,X,y):count = 0 #算法执行优化了3000次,退出tol = 0.0001last_w = self.w + 0.1last_b = self.b + 0.1length = len(X)while True:if count > 3000:#执行的次数到了break# 求解的斜率和截距的精确度达到要求if (abs(last_w - self.w) < tol) and (abs(last_b - self.b) < tol):breakcost = 0gradient_w = 0gradient_b = 0for i in range(length):cost_,gradient_w_,gradient_b_ = self.loss(X[i,0],y[i,0])cost += cost_/lengthgradient_w += gradient_w_/lengthgradient_b += gradient_b_/lengthprint('---------------------执行次数:%d。损失值是:%0.2f'%(count,cost))last_w = self.wlast_b = self.b# 更新截距和斜率self.gradient_descent(gradient_w,gradient_b,0.01)count+=1def result(self):return self.w,self.b
lm = LinearModel()
lm.fit(X,y)
lm.result()

结果:

(2.9489680632625297, 2.2698211503362224)
plt.scatter(X,y,color = "red")
plt.plot(x,2.94896*x + 2.2698211,color= "green")
plt.rcParams['font.sans-serif'] = ['Arial Unicode MS']
plt.title("自定义的算法拟合曲线")

二元一次拟合

import numpy as np
import matplotlib.pyplot as plt
from sklearn.linear_model import LinearRegression#f(x)w = w1*x**2 + w2*x + b
#一元二次#f(x1,x2) = w1*x1 + w2*x2 +b
#二元一次X = np.linspace(0,10,num = 50).reshape(-1,1)
X = np.concatenate([X**2,X],axis = 1)
X.shape
w = np.random.randint(1,10,size = 2)
b = np.random.randint(-5,5,size = 1)#矩阵乘法
y = X.dot(w) + bplt.plot(X[:,1],y,c="r")
plt.title("w1:%d.w2:%d.w3:%d"%(w[0],w[1],b[0]))

结果:

Text(0.5, 1.0, 'w1:7.w2:1.w3:-5')

#使用sklearn自带的算法进行预测
from sklearn.linear_model import LinearRegression
lr = LinearRegression()
lr.fit(X,y)
print(lr.coef_,lr.intercept_)
plt.scatter(X[:,1],y,marker = "*")x = np.linspace(-2,12,100)
plt.plot(x,7*x**2 + 1*x + -4.99,c="g")

结果:

[7. 1.] -4.999999999999972

手写线性回归,拟合多属性,多元方程

# epoch 训练的次数,梯度下降训练多少
def gradient_descent(X,y,lr,epoch,w,b):# 一批量多少,长度batch = len(X)for i in range(epoch):# d_lost:是损失的梯度d_loss = 0# 梯度,斜率梯度dw = [0 for _ in range(len(w))]# 截距梯度db = 0for j in range(batch):y_ = 0 #预测的值 预测方程 y_ = f(x) = w1*x1 + w2*x2 + bfor n in range(len(w)):y_ += X[j][n]*w[n]y_ += b# (y - y_)**2 -----> 2*(y - y_)*(-1)# (y_- y)**2  -----> 2*(y_ - y)*(1)d_loss = -(y[j] - y_)for n in range(len(w)):dw[n] += X[j][n]*d_loss/float(batch)db += 1*d_loss/float(batch)# 更新一下系数和截距,梯度下降for n in range(len(w)):w[n] -= dw[n]*lr[n]b -= db*lr[0]return w,b
lr = [0.0001,0.001]
w = np.random.randn(2)
b = np.random.randn(1)[0]
gradient_descent(X,y,lr,500,w,b)

结果:

(array([ 7.18689265, -1.25846592]), 0.6693960269813103)
plt.scatter(X[:,1],y,marker = "*")
plt.plot(x,7.1868*x**2 - 1.2584*x + 0.6694,c="g")

继续优化

  1. x的num变大,从50变成500
  2. 学习率调小

机器学习Sklearn实战——手写线性回归相关推荐

  1. svd降维 python案例_菜菜的机器学习sklearn实战-----sklearn中的降维算法PCA和SVD

    菜菜的机器学习sklearn实战-----sklearn中的降维算法PCA和SVD 概述 从什么叫维度说开来 简单讲,shape中返回了几个数字就是几维. 一张表最多就是一维 当一个数组中存在2张3行 ...

  2. Python手写线性回归算法

    作者 | 苏南下 来源 | 机器会学习ML(ID:AI_Learning007) 摘要:通俗易懂介绍线性回归算法,并 Python 手写实现. 之前我们介绍了:kNN 算法,主要用于解决分类问题,也可 ...

  3. AI应用开发实战 - 手写识别应用入门

    AI应用开发实战 - 手写识别应用入门 手写体识别的应用已经非常流行了,如输入法,图片中的文字识别等.但对于大多数开发人员来说,如何实现这样的一个应用,还是会感觉无从下手.本文从简单的MNIST训练出 ...

  4. 前馈神经网络与支持向量机实战 --- 手写数字识别

    前馈神经网络与支持向量机实战 - 手写数字识别 文章目录 前馈神经网络与支持向量机实战 --- 手写数字识别 一.前馈神经网络介绍 二.支持向量机介绍 三.数据集说明 四.环境准备 五.实验要求 六. ...

  5. 我的Go+语言初体验——Go+语言构建神经网络实战手写数字识别

    "我的Go+语言初体验" | 征文活动进行中- 我的Go+语言初体验--Go+语言构建神经网络实战手写数字识别 0. 前言 1. 神经网络相关概念 2. 构建神经网络实战手写数字识 ...

  6. pytorch 预测手写体数字_深度学习之PyTorch实战(3)——实战手写数字识别

    如果需要小编其他论文翻译,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 上一节,我们已经 ...

  7. 课程设计(毕业设计)—基于机器学习KNN算法手写数字识别系统—计算机专业课程设计(毕业设计)

    机器学习KNN算法手写数字识别系统 下载本文手写数字识别系统完整的代码和课设报告的链接(或者可以联系博主koukou(壹壹23七2五六98),获取源码和报告):https://download.csd ...

  8. 卷积神经网络与循环神经网络实战 --- 手写数字识别及诗词创作

    卷积神经网络与循环神经网络实战 - 手写数字识别及诗词创作 文章目录 卷积神经网络与循环神经网络实战 --- 手写数字识别及诗词创作 一.神经网络相关知识 1. 深度学习 2. 人工神经网络回顾 3. ...

  9. 菜菜的机器学习sklearn实战-----sklearn入门与决策树

    菜菜的机器学习sklearn实战-----sklearn入门与决策树 菜菜的机器学习sklearn实战-----sklearn入门与决策树 sklearn入门 决策树 概述 决策树是如何工作的 skl ...

最新文章

  1. Scala中的二维数组乘法
  2. 一个很好的自学网站~推荐一下
  3. 冰豹lua驱动设置_卡宴?卡宴!——冰豹ROCCAT Kain 120 AIMO开箱
  4. 95-130-410-源码-source-RabbitMQ相关-RabbitMQ Connector
  5. pandas.DataFrame.set_index
  6. Python学习——编码转换
  7. 【OpenCV学习笔记】【函数学习】十六(Rect参数介绍)
  8. 手工画图和计算机画图的内在联系,工程制图与计算机绘图教案10-11-1
  9. cnpm install Error: EACCES: permission denied
  10. 使用备份工具mysqldump备份数据库
  11. linux返回根目录的命令
  12. Rabbit MQ安装和基本概念
  13. mysql查询近一年数据
  14. Linux 内核裁剪方法
  15. Slurm如何应对超大作业的NSS压力?
  16. OOALV中字段设置ALV中下拉列表列的实现
  17. 比亚迪秦Pro修改默认导航为高德地图
  18. 黑客命令大全 (不断更新中)
  19. 回首来路漫漫,矢志不改初心
  20. 根据公式计算y的值。其中∑表示求各项的和,∏表示求各项的积。定义一个类F,实现上述功能。具体要求如下:

热门文章

  1. sublime linux 字体设置,Sublime Text的基本设置有哪些
  2. 不允许对系统目录进行即席更新_还不懂Docker?一个故事安排的明明白白!
  3. php 模拟并发请求_PHP接口并发测试的方法
  4. bert中的sep_基于向量的深层语义相似文本召回?你需要BERT和Faiss
  5. C语言记录元音字母的位置,算法训练 确定元音字母位置
  6. 基于 Kotlin 一行代码实现 android 导航栏 BottomBar
  7. python super 参数问题
  8. N叉树的深度 python实现
  9. android layout 点击,Tips_Android点击事件(Down、Move、Up)的分发_重写Layout响应拖动事件...
  10. 49. Leetcode 117. 填充每个节点的下一个右侧节点指针 II (二叉树-二叉树遍历)