最小二乘法实现的线性回归误差逆向传递的简单演示

import numpy as npimport matplotlib.pyplot as pltimport time

x_data = np.arange(100,)print(x_data)k0 = np.random.random()b0 = np.random.random()

y_data = x_data*k0+np.random.random(100,)*3print()print(y_data)# plt.ion()plt.figure(figsize=(12,9))plt.scatter(x_data,y_data,label=‘true data‘)# 假设  y = k * x + b

def wucha(x_真值,y_真值,k,b):    y_预测 = x_真值*k + b    误差 = y_真值 - y_预测    return abs(误差.sum())

def tiaocan(x_真值,y_真值,k,b,步长):    s1 = wucha(x_真值,y_真值,k+步长,b+步长)    s2 = wucha(x_真值,y_真值,k-步长,b-步长)    s3 = wucha(x_真值,y_真值,k+步长,b-步长)    s4 = wucha(x_真值,y_真值,k-步长,b+步长)    s = wucha(x_真值,y_真值,k,b)    s_list = list((s1,s2,s3,s4,s))    print(s_list)    s_list.sort()    min = s_list[0]    print(s_list)    if min == s1:        return True,True    elif min == s2:        return False,False    elif min == s3:        return True,False    elif min == s4:        return False,True    else:        return None

if __name__ == ‘__main__‘:

#运行100次    k = np.random.random()    b = np.random.random()    k1 = k    b1 = b    print(‘随机初始化的k,b初始值:‘,k1,b1)    for i in range(1000000):        n = 0.01        s = tiaocan(x_data,y_data,k1,b1,n)        print(s)        if s:            if s[0]:                k1+=n            else:                k1-=n            if s[1]:                b1+=n            else:                b1-=n        else:            break        print(‘第{}次运行k,b {}  {}‘.format(i,k1,b1))        lines = plt.plot(x_data,x_data*k1+b1,color=‘black‘)

print(‘初始化的k0 b0 真值为:‘,k0,b0*3)    print(‘k,b的初始化随机值为:‘,k,b)    print(‘一共运行了{}次‘.format(i+1))    print(‘k,b的预测值为‘,k1,b1)    plt.plot(x_data,x_data*k+b,color=‘green‘,label=‘first‘)    plt.plot(x_data,k1*x_data+b1,color=‘red‘,label=‘final‘)    plt.legend()    # plt.ioff()    plt.show()

运行以上代码,可以实现拟合随机生成的数据,拟合过后的线为红色,拟合前的为绿色,拟合过程中的线为黑色。为了便于理解,有些参数我使用了中文,Python3默认编码UTF8

原文地址:https://www.cnblogs.com/lycsdhr/p/9606640.html

时间: 2024-10-10 03:31:05

最小二乘法实现的线性回归误差逆向传递的简单演示的相关文章

反汇编逆向实例_简单函数调用

反汇编逆向实例_简单函数调用 by:比方 逆向反汇编第一章,基本函数调用 示例代码: 1 #include"stdio.h" 2 int function(int a,int b) 3 { 4 int c=a+b; 5 return c; 6 } 7 void main() 8 { 9 function(1,2); 10 getchar(); 11 } 反汇编结果: 1 #include "stdio.h" 2 3 int function(int a,int b)

线性回归-误差,似然函数

一.线性回归 在统计学中,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个自变量和因变量之间关系进行建模的一种回归分析.这种函数是一个或多个称为回归系数的模型参数的线性组合. 回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析.如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析. 下面我们来举例何为一元线性回归分析,图1为某地区的房屋面积(feet

Spark(十一) -- Mllib API编程 线性回归、KMeans、协同过滤演示

本文测试的Spark版本是1.3.1 在使用Spark的机器学习算法库之前,需要先了解Mllib中几个基础的概念和专门用于机器学习的数据类型 特征向量Vector: Vector的概念是和数学中的向量是一样的,通俗的看其实就是一个装着Double数据的数组 Vector分为两种,分别是密集型和稀疏型 创建方式如下: val array:Array[Double] = ... val vector = Vector.dense(array)//创建密集向量 val vector = Vector.

Android逆向从未如此简单

哈,又标题党了..不过我一定竭尽所能,写一篇最亲民的入门文章. 本文仅供学习交流之用,切勿用于非法用途,读者若运用所学知识,进行非法任何商业目的或者非法牟利,一切责任由操作者自行承担,与本人无关.希望读者仅仅从了解原理,保护自身APP尽量减少危害出发来阅读本文. 本文发布自wing的地方酒馆,转载请注明出处. 本文以一个最简单的例子,来教给大家Android逆向入门的一些知识.所以首先我们需要准备一个APK,做的简单一些,就是一个EditText,已经一个按钮,模拟验证注册码. 当验证码填写正确

对touch事件传递的简单理解

对View事件传递的理解,看的这篇. 对事件传递有了大致的了解.onInterceptTouchEvent 函数决定是否将事件拦截,拦截之后,该控件的所有子控件接收不到这个事件.onTouchEvent 函数判断是否消费此事件,在父控件把事件传递到子控件的过程中,假设都没有拦截,那么消息会传递到底层控件,底层控件可以选择消费或者不消费,如果消费,那么事件到此终止,如果没有消费,则一层一层传递给父类.如果中途被拦截了,那么拦截的那个控件充当上述过程的底层控件.最重要的,在这个过程中,事件所经过的控

在Activity之间传递数据—简单数据/Bundle

1.首先要知道怎么通过一个Activity 打开另一个Activity.主页面为MainActivity,另一个页面为OtherActivity.MainActivity中的按钮Id为btnStart. 此实例类似与在winform中,通过单击一个按钮,打开另一个form. 在MainActivity的OnCreate方法中填写一下代码: findViewById(R.id.btnStart).setOnClickListener(new View.OnClickListener() {    

分表数据的页面显示和后台传递(简单实现)

需求:1.统计每个城市的某两项数据在一段时间内的总量,展示在页面上.2.将结果导出Excel文件. 目前数据库是分库分表设计,分为南北方双库,一个城市对应一张表. 从查询的效率和用户的感觉考虑,这时将所有数据查出后再显示到页面并不是最好的方式,而且代码也会变得较为复杂. 实现方式(偏前端): 1.获取数据并显示 页面使用表格方式显示数据 <table> <thead> <tr> <th>城市</th> <th>A</th>

php在cli模式下取得命令行中的参数的方法-getopt命令行可传递数组-简单自定义方法取命令行参数

在cli模式下执行PHP时,自动给脚本文件传递了一个变量$argv,其值即是一个命令中所有值组成的数组(以空格区分),在PHP程序中接收参数有3种方法1.直接使用argv变量数组. 2.使用$_SERVER['argv']全局变量来获取,其值和1是一样的. 3.使用getopt方法 #getopt方法格式 array getopt ( string $options [, array $longopts ] ) options:该字符串中的每个字符会被当做选项字符,匹配传入脚本的选项以单个连字符

Java逆向基础之简单的补丁

本文参考:http://www.vuln.cn/7118 本文参考:<Reverse Engineering for Beginners>Dennis Yurichev著 本文需要用到IDA 简单的补丁 看一个例子 public class nag { public static void nag_screen() { System.out.println("This program is not registered"); }; public static void ma