机器学习线性回归实现

机器学习教程之2-线性回归(linear regression)的sklearn实现 0.概述线性回归属于机器学习中的回归问题,因为线性回归是根据数据预测一个准确的输出值,而不是分类结果。 注意:”机器学习教程之1”里的感知器讲的是分类问题,它是寻找超平面将数据分为正、负两类。优点:非常简单、易于建模、应用广泛缺点:1.模型表示 数据集:数据的集合监督学习:从已有数据中发现关系:由多个输入映射一个输出。并用数学模型表示,将新数据用这数学模型运算得到新的输出。监督学习的方式:回归问 阅读详情

代码链接:


from numpy import *


def loadDataSet(fileName):
    numFeat = len(open(fileName).readline().split('\t')) - 1
    dataMat = []
    labelMat = []
    fr = open(fileName)
    for line in fr.readlines():
        lineArr = []
        curLine = line.strip().split()
        for i in range(numFeat):
            lineArr.append(float(curLine[i]))
        dataMat.append(lineArr)
        labelMat.append(float(curLine[-1]))
    return dataMat, labelMat


def standRegres(xArr, yArr):
    xMat = mat(xArr)
    yMat = mat(yArr).T
    xTx = xMat.T * xMat
    if linalg.det(xTx) == 0.0:
        print("This matrix is singular, cannot do inverse")
        return
    ws = xTx.I * (xMat.T * yMat)
    return ws


def lwlr(testPoint, xArr, yArr, k=1.0):
    xMat = mat(xArr)
    yMat = mat(yArr).T
    m = shape(xMat)[0]
    weights = mat(eye((m)))  # 单位矩阵, 对角线为1, 其他位置为0的矩阵
    for j in range(m):
        diffMat = testPoint - xMat[j, :]
        weights[j, j] = exp(diffMat * diffMat.T / (-2.0 * k ** 2))
    xTx = xMat.T * (weights * xMat)
    if linalg.det(xTx) == 0.0:
        print("This matrix is singular, cannot do inverse")
        return
    ws = xTx.I * (xMat.T * (weights * yMat))
    return testPoint * ws


def lwlrTest(testArr, xArr, yArr, k=1.0):
    m = shape(testArr)[0]
    yHat = zeros(m)
    for i in range(m):
        yHat[i] = lwlr(testArr[i], xArr, yArr, k)
    return yHat


def rssError(yArr, yHatArr):
    return ((yArr - yHatArr) ** 2).sum()


# 计算回归系数
def ridgeRegres(xMat, yMat, lam=0.2):
    xTx = xMat.T * xMat
    denom = xTx + eye(shape(xMat)[1]) * lam
    if linalg.det(denom) == 0.0:
        print("This matrix is singular, cannot do inverse")
        return
    ws = denom.I * (xMat.T * yMat)
    return ws


def ridgeTest(xArr, yArr):
    xMat = mat(xArr)
    yMat = mat(yArr).T
    yMean = mean(yMat, 0)  # 计算均值向量
    yMat = yMat - yMean
    xMeans = mean(xMat, 0)
    xVar = var(xMat, 0)  # 计算方差向量
    xMat = (xMat - xMeans) / xVar
    numTestPts = 30
    wMat = zeros((numTestPts, shape(xMat)[1]))
    for i in range(numTestPts):
        ws = ridgeRegres(xMat, yMat, exp(i - 10))
        wMat[i, :] = ws.T
    return wMat


def regularize(xMat):  # regularize by columns
    inMat = xMat.copy()
    inMeans = mean(inMat, 0)  # calc mean then subtract it off
    inVar = var(inMat, 0)  # calc variance of Xi then divide by it
    inMat = (inMat - inMeans) / inVar
    return inMat


# xArr输入数据, yArr预测向量
# eps每次迭代需要调整的步长, numIt迭代次数
def stageWise(xArr, yArr, eps=0.01, numIt=100):
    xMat = mat(xArr)
    yMat = mat(yArr).T
    yMean = mean(yMat, 0)
    yMat = yMat - yMean
    xMat = regularize(xMat)
    m, n = shape(xMat)
    returnMat = zeros((numIt, n))
    ws = zeros((n, 1))
    wsTest = ws.copy()
    wsMax = ws.copy()
    for i in range(numIt):
        print(ws.T)
        lowestError = inf
        for j in range(n):
            for sign in [-1, 1]:
                wsTest = ws.copy()
                wsTest[j] += eps * sign
                yTest = xMat * wsTest
                rssE = rssError(yMat.A, yTest.A)
                if rssE < lowestError:
                    lowestError = rssE
                    wsMax = wsTest
        ws = wsMax.copy()  # 下一迭代从wsMax开始
        returnMat[i, :] = ws.T
    return returnMat


from time import sleep
import json
import urllib.request


def searchForSet(retX, retY, setNum, yr, numPce, origPrc):
    sleep(10)
    myAPIstr = 'get from code.google.com'
    searchURL = 'https://www.googleapis.com/shopping/search/v1/' \
                'public/products?key=%s&country=US&q=lego+%d&alt=json' % (myAPIstr, setNum)
    pg = urllib.request.urlopen(searchURL)
    retDict = json.loads(pg.read())
    for i in range(len(retDict['items'])):
        try:
            curItem = retDict['items'][i]
            if curItem['product']['condition'] == 'new':
                newFlag = 1
            else:
                newFlag = 0
            listOfInv = curItem['product']['inventories']
            for item in listOfInv:
                sellingPrice = item['price']
                if sellingPrice > origPrc * 0.5:
                    print("%d\t%d\t%d\t%f\t%f" % (yr, numPce, newFlag, origPrc, sellingPrice))
                    retX.append([yr, numPce, newFlag, origPrc])
                    retY.append(sellingPrice)
        except:
            print('problem with item %d' % i)


# 数据收集
def setDataCollect(retX, retY):
    searchForSet(retX, retY, 8288, 2006, 800, 49.99)
    searchForSet(retX, retY, 10030, 2002, 3096, 269.99)
    searchForSet(retX, retY, 10179, 2007, 5195, 499.99)
    searchForSet(retX, retY, 10081, 2007, 3428, 199.99)
    searchForSet(retX, retY, 10189, 2008, 5922, 299.99)
    searchForSet(retX, retY, 10196, 2009, 3263, 249.99)


'''
    shape(lgX)
    lgX1= mat(ones((58,5)))
    lgX1[:,1:5] = mat(lgX)
    lgX[0]
    lgX1[0]
    ws = regression.standRegres(lgX1, lgY)
    ws
    lgX1[0]*ws
    lgX1[-1]*ws
    lgX1[43]*ws
'''

# xArr,yArr存放数据集x,y值
# numVal为交叉验证次数
def crossValidation(xArr, yArr, numVal=10):
    m = len(yArr)
    indexList = range(m)
    errorMat = zeros((numVal, 30))
    for i in range(numVal):
        trainX = []
        trainY = []
        testX = []
        testY = []
        random.shuffle(indexList)
        for j in range(m):
            if j < m * 0.9:
                trainX.append(xArr[indexList[j]])
                trainY.append(yArr[indexList[j]])
            else:
                testX.append(xArr[indexList[j]])
                testY.append(yArr[indexList[j]])
        wMat = ridgeTest(trainX, trainY)
        for k in range(30):
            matTestX = mat(testX)
            matTrainX = mat(trainX)
            meanTrain = mean(matTrainX, 0)
            varTrain = var(matTrainX, 0)
            matTestX = (matTestX - meanTrain) / varTrain
            yEst = matTestX * mat(wMat[k, :]).T + mean(trainY)
            errorMat[i, k] = rssError(yEst.T.A, array(testY))
        meanErrors = mean(errorMat, 0)
        minMean = float(min(meanErrors))
        bestWeights = wMat(nonzero(meanErrors == minMean))
        xMat = mat(xArr)
        yMat = mat(yArr).T
        meanX = mean(xMat, 0)
        varX = var(xMat, 0)
        unReg = bestWeights / varX
        print("the best model from Ridge Regression is:\n", unReg)
        print("with constant term:", -1 * sum(multiply(meanX, unReg)) + mean(yMat))

'''
regression.crossValidation(lgX, lgY, 10)
regression.ridgeTest(lgX,lgY)
'''


机器学习经典算法详解及Python实现--线性回归(Linear Regression)算法 回归是统计学中最有力的工具之一。回归算法用于连续型分布预测,针对的是数值型的样本,使用回归,可以在给定输入的时候预测出一个数值,这是对分类方法的提升,因为这样可以预测连续型数据而不仅仅是离散的类别标签。回归的目的就是建立一个回归方程用来预测目标值,回归的求解就是求这个回归方程的回归系数。预测的方法当然十分简单,回归系数乘以输入值再全部相加就得到了预测值。说到回归,常常指的也就是线性回归,因此本文阐述的就是多元线性回归方程的求解和应用,通过Python实现。 阅读详情

相关推荐

机器学习sklearn之线性回归(linear regression)的实现

机器学习sklearn之线性回归(Linear Regression)LR sklearn拟合数据的基本步骤: 读取数据 拟合数据 预测数据 在这里要用到genfromtxt函数 numpy.genfromtxt(fname, dtype=&amp;amp;lt;type 'float'&amp;amp;gt;, comments='#', delimiter=None, skip_header=0, skip_...

朴素.无恙的博客 1712

机器学习-线性回归(从零实现以及简化实现)

如果有数据集,则跳过 生成一个包含1000个样本的数据集, 每个样本包含从标准正态分布中采样的2个特征 torch.normal(mean, std, size) 定义一个生成数据样本的函数 2、保存到excel文件中 数据生成的为tensor数据类型,保存到excel文件中,要转换格式为numpy类型。 打开文件如下所示: 读取文件的numpy数据格式 4、初始化模型参数 初始化模型参数,通过从均值为0、标准差为0.01的正态分布中采样随机数来初始化权重, 并将偏置初始化为0。 5、定义模型 y=WTX+

Tc、zyh的博客 2304

机器学习笔记一:使用LinearRegression实现Boston房价线性回归

一、LinearRegression类 sklearn.linear_model.LinearRegression(fit_intercept=True, normalize=False, copy_X=True, n_jobs=None) 参数 含义 fit_intercept 是否有截据,如果没有则直线过原点 normalize 是否将数据归一化 copy_X 默认为True,当为True时,X会被copi

耐心的小黑的博客 2781

【机器学习-06】线性回归(Linear Regression,LR)算法:原理、应用与实现

在【机器学习-01】机器学习一般建模流程yiβ0β1x1βp−1xp−1εii12nyi​β0​β1​x1​...βp−1​xp−1​εi​i12...n上述等式的矩阵形式是yXβεy∈RnX∈Rn∗pβ∈Rpε∈RnyXβεy∈RnX∈Rn∗pβ∈Rpε∈Rn其中 Y 是反应变量, X 是解释变量,β 是参数。

qq_38614074的博客 1万+

ML之LiR:机器学习经典算法之线性回归算法LiR的简介、使用方法、代码实现、经典案例之详细攻略

​ ML之LiR:机器学习经典算法之线性回归算法LiR的简介、使用方法、代码实现、经典案例之详细攻略 目录 线性回归算法LiR的简介 线性回归算法LiR的使用方法 线性回归算法LiR的经典案例 线性回归算法LiR的简介 线性回归方程是利用数理统计中的回归分析,来确定两种或两种以上变数间相互依赖的定量关系的一种统计分析方法之一。线性回归也是回归分析中第一种经过严格研究并在实际应用中广泛使用的类型。按自变量个数可分为一元线性回归分析方程和多元线性回归分析方程。

头部AI社区如有邀博主AI主题演讲请私信—心比天高,仗剑走天涯,保持热爱,奔赴向梦想!低调,专注,谦虚,自律,反思,成长,还算比较正能量的博主,公益免费传播…内心特别想在AI界做出一些可以推进历史进程影响力的技术(兴趣使然,有点小情怀,也有点使命感呀 1万+

机器学习--线性回归的代码实现

需要使用到Numpy生成X和Y 在 anconda提供的编译器Spyder中: import numpy as np 引用numpy库作为np来使用 先生成一个X数组作为X轴: x=list(range(10,29)) 输出10到28的一个数组,但是这个数组不适用于我们的图像构建,所以要引用numpy库中的array函数 x= np.array(x) 通过这个函数将原数组转换成我们需要用到的数组 ...

Gesshoku的博客 1276

【机器学习】线性回归实验数据

线性回归是利用数理统计中回归分析,来确定两种或两种以上变量间相互依赖的定量关系的一种统计分析方法,运用十分广泛。其表达形式为y = w'x+e,e为误差服从均值为0的正态分布。回归分析中,只包括一个自变量和一个因变量,且二者的关系可用一条直线近似表示,这种回归分析称为一元线性回归分析。如果回归分析中包括两个或两个以上的自变量,且因变量和自变量之间是线性关系,则称为多元线性回归分析。

PYTHON机器学习实战——线性回归 Linear Regression

线性回归代码详解 #-*- coding:utf-8 -*- #!/usr/bin/python ''' 线性回归 @author: Peter ''' # 测试代码 import regression as lr lr.lrTest() lr.lrTest(0.05) # import regression as lr lr.ridgeTestPlot() # impor

万有文的博客 1712

【UE5】三步搞定Pixel Streaming:从零搭建Windows像素流服务

本文详细介绍了如何在Windows平台上快速搭建UE5 Pixel Streaming像素流服务,从插件安装、项目打包到服务启动的全流程操作。通过实战案例和优化配置,帮助开发者实现零客户端配置、跨设备兼容的高性能3D应用流式传输,特别适合建筑可视化和实时协作场景。

weixin_29000991的博客 319

五分钟搞懂游戏开发中的抗锯齿算法

常见抗锯齿算法总结锯齿由来抗锯齿算法SSAAMSAACSAA 锯齿由来 场景的定义在三维空间中是连续的,而最终显示的像素则是一个离散的二维数组,这是计算机屏幕产生锯齿的原因。在计算机处理图形的过程中(渲染管线了解一下),有一个非常重要的阶段,就是光栅化,光栅化主要的作用是将顶点数据的不连续性通过插值计算,将两个顶点之间不存在的点进行弥补,然后实现到屏幕像素点上的一一映射。如图,现在要在屏幕上绘制一...

绿洲守望者 1万+

机器学习(一)——线性回归介绍及案例实战(Python实现)

本文介绍了机器学习之线性回归模型并使用Python代码进行实现

风暖暖的博客 1万+

LabVIEW+数据库应用系列保姆级教程,第一篇数据库连接

目录LabVIEW连接数据库的方法连接MySQL连接Oracle,SQL Server,Access等 LabVIEW连接数据库的方法 1、创建udl(Universal Data Link)是通用数据连接文件。界面操作,简单快捷。 2、编写连接字符串。需要熟悉连接字符串的结构,容易出错。 3、其他… 本教程教你使用第1种方法,也是最简单、最常用的方法。 连接MySQL 1、在MySQL Installer内安装MySQL Connector/ODBC,建议安装32位(X86),如下图: 2、创建ODBC

wwplh5520370的博客 1万+

机器学习之线性回归算法Linear Regression(python代码实现)

线性回归(Linear Regression)是一种非常简单、用处非常广泛、含义也非常容易理解的一类经典的算法,非常合适作为机器学习的入门算法。 线性回归就是拟合出一个线性组合关系的函数。要找一条直线,并且让这条直线尽可能地拟合所有数据点。即:试图找到一条直线,使所有样本到直线上的欧式距离之和最小。 一元线性回归(Linear Regression) 拟合出一个线性组合关系的函数:y = wx+b 。 拟合图像: 多元线性回归 多元线性回归比一元线性回归复杂,其组成的不是直线,而是一..

记录知识,学习分享 4万+

人工智能训练师技能等级认定四级技能考核试卷-样题4

本文为人工智能训练师四级技能考核试卷,包含六个实操考核项目,总时长150分钟。考核内容涵盖:1)车牌数据集规范评估与格式处理;2)车牌数据集采集代码修改与数据处理;3)房价预测数据集加载、预处理与可视化分析;4)车牌标注数据集审核与修正;5)螺丝螺母检测数据集的平台创建与共享;6)螺丝螺母数据的去噪处理与标注优化。要求考生使用Python编程、数据处理平台和标注工具完成各项任务,重点考察数据加载、格式转换、缺失值处理、数据可视化、标注审核及平台操作等技能。所有操作需在配备Python3.7和深度学习平台的W

weixin_42221934的博客 349

matinal:SAP 采购中形成的差异

如果库存足够会影响到物料。

matinal 當冬夜漸暖 。公众号:matinal 820

python中的linearregression_【python+机器学习(2)】python实现Linear Regression

欢迎关注哈希大数据微信公众号【哈希大数据】python实现多元线性回归算法(lr)想必大家在很早之前就接触过函数的概念,即寻找自变量和因变量之间的对应关系,一元一次、多元一次、一元二次等等,表示的就是变量间具有线性、非线性,相关关系或无关关系等。同样的在机器学习中,一个重要而且很常见的问题就是学习特征变量(自变量)与响应变量(因变量)之间的函数关系,进而对新出现的变量进行结果预测。这种寻找连续变量...

weixin_39972567的博客 1123

鸿蒙平板PC应用开发:在termux中安装ubuntu

打开AVNC点击右上角的设置图标,然后点击 输入 , 点击手势栏目中的 单指轻扫 ,选择滚动远程内容

DMZDAMS的博客 5202

机器学习之线性回归 Linear Regression(二)Python实现

一元线性回归         假设你想计算匹萨的价格。 虽然看看菜单就知道了,不过也可以用机器学习方法建一个线性回归模型,通过分析匹萨的直径与价格的线性关系,来预测任意直径匹萨的价格。假设我们查到了部分匹萨的直径与价格的数据,这就构成了训练数据,如下表所示: import matplotlib.pyplot as plt def runplt(): plt.figure() p

ivy_reny的专栏 3万+

电源完整性必看!用SIwave提取PDN阻抗曲线的3个关键设置与常见报错解决

本文深入探讨了在SIwave中进行电源完整性(PI)仿真时,提取PDN阻抗曲线的三个核心设置要点。重点解析了端口阻抗设为0.1欧姆的物理意义与SYZ参数仿真中的阻抗匹配原则,并提供了针对常见收敛性问题和模型误差的实战排查思路,旨在帮助工程师获得更精确可靠的仿真结果,为去耦电容优化提供依据。

b9c0d的博客 352

sim800c插卡后指示灯还是一秒一闪无法接收发送短信,如何解决?

🏆 本文收录于《全栈Bug调优(实战版)》专栏,致力于分享我在项目实战过程中遇到的各类Bug及其原因,并提供切实有效的解决方案。无论你是初学者还是经验丰富的开发者,本文将为你指引出一条更高效的Bug修复之路,助你早日登顶,迈向财富自由的梦想🚀!同时,欢迎大家关注、收藏、订阅本专栏,更多精彩内容正在持续更新中。让我们一起进步,Up!Up!Up!    备注: 部分问题/难题源自互联网,经过精心筛选和整理,结合数位十多年大厂实战经验资深大佬经验总结所得,数条可行方案供所需之人参考。

**My Coding Family** 1168

机器学习----线性回归 (Linear Regression)算法原理及python实现

线性回归(Linear Regression) 可能是最流行的机器学习算法。线性回归就是要找一条直线,并且让这条直线尽可能地拟合散点图中的数据点。 线性模型:给定由d个属性描述的示例,线性模型试图学得一个通过属性的线性组合来进行预测的函数。f(x) = wTx+b 线性回归试图学得一个线性模型以尽可能准确的预测实值输出标记,公式: f(xi) = wxi + b,使得f(xi) ≈ yi 我们的任务就是求出w和b,可用均方误差最小化的方法,基于均方误差最小化来进行模型求解的方法称为最小二乘法,在线性回.

weixin_43580130的博客 5533

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ML-matlab实现linear regression线性回归

最近在系统学习ML(机器学习) 这里给出部分实验所需代码 说明 环境: matlab r2014b macos 代码 说明:线性回归是简单的不能再简单的入门操作了,关于证明这里就不再给出了。资料很多。 一元线性回归 clc,clear close all x = load('ex1_1x.dat') y = load('ex1_1y.dat') figure % open a new f i g ...

FrankDura的博客 2132

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

机器学习线性回归算法原理及简易实现

以上便是机器学习线性回归原理及代码实现的全部内容。文章体量不小,在写作中也许会出一些错误,欢迎大家指出,定第一时间改正。若代码或理论讲解不够详细,存在有问题也欢迎留言讨论。

zrypbl的博客 1409

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【机器学习系列1】线性回归LinearRegression——数学推导和纯Numpy实现

目录数学推导notationsobjective functionpartial derivativematrix version手动实现线性回归训练器 train思路代码实现预测器 predict思路代码评价器 evaluation思路代码数据处理代码与sklearn比较完整代码 这一系列是学习公众号“机器学习实验室”的笔记,跟着大佬的脚步一个个实现。 数学推导 notations X={xi⃗...

occamo的博客 1022
上一篇: 基于SVM手写数字识别
下一篇: 机器学习PCA实现
Edwards_June
博客等级 码龄12年 12粉丝 182原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值