广告
返回顶部
首页 > 资讯 > 后端开发 > Python >人工智能—Python实现线性回归
  • 491
分享到

人工智能—Python实现线性回归

2024-04-02 19:04:59 491人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

1、概述 (1)人工智能学习           (2)机器学习  (3)有监督学习  (4)线

1、概述

(1)人工智能学习          

(2)机器学习 

(3)有监督学习 

(4)线性回归 

2、线性回归 

(1)实现步骤

  • 根据随机初始化的 w x b 和 y 来计算 loss
  • 根据当前的 w x b 和 y 的值来计算梯度
  • 更新梯度,循环将新的 w′ 和 b′ 复赋给 w 和 b ,最终得到一个最优的 w′ 和 b′ 作为方程最终的

(2)数学表达式        

3、代码实现(python

(1)机器学习库(sklearn.linear_model)

代码:

from sklearn import linear_model
from sklearn.linear_model import LinearRegression
import matplotlib.pyplot as plt#用于作图
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
import numpy as np#用于创建向量
 
 
reg=linear_model.LinearRegression(fit_intercept=True,nORMalize=False)
x=[[32.50235],[53.4268],[61.53036],[47.47564],[59.81321],[55.14219],[52.14219],[39.29957],
 [48.10504],[52.55001],[45.41873],[54.35163],[44.16405],[58.16847],[56.72721]]
y=[31.70701,68.7776,62.56238,71.54663,87.23093,78.21152,79.64197,59.17149,75.33124,71.30088,55.16568,82.47885,62.00892
,75.39287,81.43619]
reg.fit(x,y)
k=reg.coef_#获取斜率w1,w2,w3,...,wn
b=reg.intercept_#获取截距w0
x0=np.arange(30,60,0.2)
y0=k*x0+b
print("k={0},b={1}".format(k,b))
plt.scatter(x,y)
plt.plot(x0,y0,label='LinearRegression')
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()

结果:

k=[1.36695374],b=0.13079331831460195

(2)Python详细实现(方法1)

代码:

#方法1
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
#数据生成
data = []
for i in range(100):
    x = np.random.uniform(3., 12.)
    # mean=0, std=1
    eps = np.random.normal(0., 1)
    y = 1.677 * x + 0.039 + eps
    data.append([x, y])
 
data = np.array(data)
 
#统计误差
# y = wx + b
def compute_error_for_line_given_points(b, w, points):
    totalError = 0
    for i in range(0, len(points)):
        x = points[i, 0]
        y = points[i, 1]
        # computer mean-squared-error
        totalError += (y - (w * x + b)) ** 2
    # average loss for each point
    return totalError / float(len(points))
 
 
#计算梯度
def step_gradient(b_current, w_current, points, learningRate):
    b_gradient = 0
    w_gradient = 0
    N = float(len(points))
    for i in range(0, len(points)):
        x = points[i, 0]
        y = points[i, 1]
        # grad_b = 2(wx+b-y)
        b_gradient += (2/N) * ((w_current * x + b_current) - y)
        # grad_w = 2(wx+b-y)*x
        w_gradient += (2/N) * x * ((w_current * x + b_current) - y)
    # update w'
    new_b = b_current - (learningRate * b_gradient)
    new_w = w_current - (learningRate * w_gradient)
    return [new_b, new_w]
 
#迭代更新
def gradient_descent_runner(points, starting_b, starting_w, learning_rate, num_iterations):
    b = starting_b
    w = starting_w
    # update for several times
    for i in range(num_iterations):
        b, w = step_gradient(b, w, np.array(points), learning_rate)
    return [b, w]
 
 
def main():
 
    learning_rate = 0.0001
    initial_b = 0  # initial y-intercept guess
    initial_w = 0  # initial slope guess
    num_iterations = 1000
    print("迭代前 b = {0}, w = {1}, error = {2}"
          .format(initial_b, initial_w,
                  compute_error_for_line_given_points(initial_b, initial_w, data))
          )
    print("Running...")
    [b, w] = gradient_descent_runner(data, initial_b, initial_w, learning_rate, num_iterations)
    print("第 {0} 次迭代结果 b = {1}, w = {2}, error = {3}".
          format(num_iterations, b, w,
                 compute_error_for_line_given_points(b, w, data))
          )
    plt.plot(data[:,0],data[:,1], color='b', marker='+', linestyle='--',label='true')
    plt.plot(data[:,0],w*data[:,0]+b,color='r',label='predict')
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.legend()
    plt.show()
 
 
if __name__ == '__main__':
    main()
 
 

 结果:

迭代前 :b = 0, w = 0, error = 186.61000821356697
Running...
第 1000 次迭代结果:b = 0.20558501549252192, w = 1.6589067569038516, error = 0.9963685680112963

(3)Python详细实现(方法2)

代码:

#方法2
 
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import matplotlib as mpl
mpl.rcParams["font.sans-serif"]=["SimHei"]
mpl.rcParams["axes.unicode_minus"]=False
 
 
# y = wx + b
#Import data
file=pd.read_csv("data.csv")
 
def compute_error_for_line_given(b, w):
    totalError = np.sum((file['y']-(w*file['x']+b))**2)
    return np.mean(totalError)
 
def step_gradient(b_current, w_current,  learningRate):
    b_gradient = 0
    w_gradient = 0
    N = float(len(file['x']))
    for i in range (0,len(file['x'])):
        # grad_b = 2(wx+b-y)
        b_gradient += (2 / N) * ((w_current * file['x'] + b_current) - file['y'])
        # grad_w = 2(wx+b-y)*x
        w_gradient += (2 / N) * file['x'] * ((w_current * file['x'] + b_current) - file['x'])
    # update w'
    new_b = b_current - (learningRate * b_gradient)
    new_w = w_current - (learningRate * w_gradient)
    return [new_b, new_w]
 
 
def gradient_descent_runner( starting_b, starting_w, learning_rate, num_iterations):
    b = starting_b
    w = starting_w
    # update for several times
    for i in range(num_iterations):
        b, w = step_gradient(b, w,  learning_rate)
    return [b, w]
 
 
def main():
    learning_rate = 0.0001
    initial_b = 0  # initial y-intercept guess
    initial_w = 0  # initial slope guess
    num_iterations = 100
    print("Starting gradient descent at b = {0}, w = {1}, error = {2}"
          .format(initial_b, initial_w,
                  compute_error_for_line_given(initial_b, initial_w))
          )
    print("Running...")
    [b, w] = gradient_descent_runner(initial_b, initial_w, learning_rate, num_iterations)
    print("After {0} iterations b = {1}, w = {2}, error = {3}".
          format(num_iterations, b, w,
                 compute_error_for_line_given(b, w))
          )
    plt.plot(file['x'],file['y'],'ro',label='线性回归')
    plt.xlabel('X')
    plt.ylabel('Y')
    plt.legend()
    plt.show()
 
 
 
 
if __name__ == '__main__':
    main()

结果:

Starting gradient descent at b = 0, w = 0, error = 75104.71822821398
Running...
After 100 iterations b = 0     0.014845
1     0.325621
2     0.036883
3     0.502265
4     0.564917
5     0.479366
6     0.568968
7     0.422619
8     0.565073
9     0.393907
10    0.216854
11    0.580750
12    0.379350
13    0.361574
14    0.511651
dtype: float64, w = 0     0.999520
1     0.994006
2     0.999405
3     0.989645
4     0.990683
5     0.991444
6     0.989282
7     0.989573
8     0.988498
9     0.992633
10    0.995329
11    0.989490
12    0.991617
13    0.993872
14    0.991116
dtype: float64, error = 6451.5510231710905

数据: 

(4)Python详细实现(方法3) 

#方法3
 
import numpy as np
 
points = np.genfromtxt("data.csv", delimiter=",")
#从数据读入到返回需要两个迭代循环,第一个迭代将文件中每一行转化为一个字符串序列,
#第二个循环迭代对每个字符串序列指定合适的数据类型:
# y = wx + b
def compute_error_for_line_given_points(b, w, points):
    totalError = 0
    for i in range(0, len(points)):
        x = points[i, 0]
        y = points[i, 1]
        # computer mean-squared-error
        totalError += (y - (w * x + b)) ** 2
    # average loss for each point
    return totalError / float(len(points))
 
 
def step_gradient(b_current, w_current, points, learningRate):
    b_gradient = 0
    w_gradient = 0
    N = float(len(points))
    for i in range(0, len(points)):
        x = points[i, 0]
        y = points[i, 1]
        # grad_b = 2(wx+b-y)
        b_gradient += (2 / N) * ((w_current * x + b_current) - y)
        # grad_w = 2(wx+b-y)*x
        w_gradient += (2 / N) * x * ((w_current * x + b_current) - y)
    # update w'
    new_b = b_current - (learningRate * b_gradient)
    new_w = w_current - (learningRate * w_gradient)
    return [new_b, new_w]
 
 
def gradient_descent_runner(points, starting_b, starting_w, learning_rate, num_iterations):
    b = starting_b
    w = starting_w
    # update for several times
    for i in range(num_iterations):
        b, w = step_gradient(b, w, np.array(points), learning_rate)
    return [b, w]
 
 
def main():
    learning_rate = 0.0001
    initial_b = 0  # initial y-intercept guess
    initial_w = 0  # initial slope guess
    num_iterations = 1000
    print("Starting gradient descent at b = {0}, w = {1}, error = {2}"
          .format(initial_b, initial_w,
                  compute_error_for_line_given_points(initial_b, initial_w, points))
          )
    print("Running...")
    [b, w] = gradient_descent_runner(points, initial_b, initial_w, learning_rate, num_iterations)
    print("After {0} iterations b = {1}, w = {2}, error = {3}".
          format(num_iterations, b, w,
                 compute_error_for_line_given_points(b, w, points))
          )
 
 
if __name__ == '__main__':
    main()

4、案例——房屋与价格、尺寸

(1)代码 

#1.导入包
import matplotlib.pyplot as plt
import numpy as np
import pandas as pd
from sklearn import linear_model
 
#2.加载训练数据,建立回归方程
# 取数据集(1)
datasets_X = []     #存放房屋面积
datasets_Y = []     #存放交易价格
fr = open('房价与房屋尺寸.csv','r')    #读取文件,r: 以只读方式打开文件,w: 打开一个文件只用于写入。
lines = fr.readlines()              #一次读取整个文件。
for line in lines:                  #逐行进行操作,循环遍历所有数据
    items = line.strip().split(',')    #去除数据文件中的逗号,strip()用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列。
                                       #split(‘ '): 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串。
    datasets_X.append(int(items[0]))   #将读取的数据转换为int型,并分别写入
    datasets_Y.append(int(items[1]))
 
length = len(datasets_X)              #求得datasets_X的长度,即为数据的总数
datasets_X = np.array(datasets_X).reshape([length,1])   #将datasets_X转化为数组,并变为1维,以符合线性回归拟合函数输入参数要求
datasets_Y = np.array(datasets_Y)                    #将datasets_Y转化为数组
 
#取数据集(2)
'''fr = pd.read_csv('房价与房屋尺寸.csv',encoding='utf-8')
datasets_X=fr['房屋面积']
datasets_Y=fr['交易价格']'''
 
minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX,maxX).reshape([-1,1])        #以数据datasets_X的最大值和最小值为范围,建立等差数列,方便后续画图。
                                                #reshape([-1,1]),转换成1列,reshape([2,-1]):转换成两行
linear = linear_model.LinearRegression()      #调用线性回归模块,建立回归方程,拟合数据
linear.fit(datasets_X, datasets_Y)
 
#3.斜率及截距
print('Coefficients:', linear.coef_)      #查看回归方程系数(k)
print('intercept:', linear.intercept_)    ##查看回归方程截距(b)
print('y={0}x+{1}'.format(linear.coef_,linear.intercept_)) #拟合线
 
# 4.图像中显示
plt.scatter(datasets_X, datasets_Y, color = 'red')
plt.plot(X, linear.predict(X), color = 'blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()

(2)结果

Coefficients: [0.14198749]
intercept: 53.43633899175563
y=[0.14198749]x+53.43633899175563

(3)数据 

第一列是房屋面积,第二列是交易价格

到此这篇关于人工智能—Python实现线性回归的文章就介绍到这了,更多相关 Python实现线性回归内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 人工智能—Python实现线性回归

本文链接: https://www.lsjlt.com/news/162602.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 人工智能—Python实现线性回归
    1、概述 (1)人工智能学习           (2)机器学习  (3)有监督学习  (4)线...
    99+
    2022-11-12
  • python人工智能算法之线性回归实例
    目录线性回归使用场景分析:总结:线性回归 是一种常见的机器学习算法,也是人工智能中常用的算法。它是一种用于预测数值型输出变量与一个或多个自变量之间线性关系的方法。例如,你可以使用线...
    99+
    2023-03-21
    python 线性回归算法 python 人工智能
  • 人工智能-Python实现岭回归
    1 概述 1.1 线性回归 对于一般地线性回归问题,参数的求解采用的是最小二乘法,其目标函数如下: 1.2 岭回归  岭回归(ridge regression) 是一种...
    99+
    2022-11-12
  • 人工智能-Python实现多项式回归
    目录1、概述1.1 有监督学习1.2 多项式回归2 概念3 案例实现——方法1 3.1 案例分析3.2 代码实现 3.3 结果 ...
    99+
    2022-11-12
  • python人工智能算法之线性回归怎么使用
    这篇文章主要介绍“python人工智能算法之线性回归怎么使用”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“python人工智能算法之线性回归怎么使用”文章能帮助大家解决问题。线性回归是一种常见的机器...
    99+
    2023-07-05
  • python人工智能深度学习入门逻辑回归限制
    目录1.逻辑回归的限制2.深度学习的引入3.深度学习的计算方式4.神经网络的损失函数1.逻辑回归的限制 逻辑回归分类的时候,是把线性的函数输入进sigmoid函数进行转换,后进行分类...
    99+
    2022-11-12
  • 线性回归与岭回归python代码实现
      在线性回归中我们要求的参数为: 详细的推导可以参见:http://blog.csdn.net/weiyongle1996/article/details/73727505 所以代码实现主要就是实现上式,python代码如下: i...
    99+
    2023-01-31
    线性 代码 python
  • python实现线性回归算法
    本文用python实现线性回归算法,供大家参考,具体内容如下 # -*- coding: utf-8 -*- """ Created on Fri Oct 11 19:25:11...
    99+
    2022-11-12
  • Python怎么实现线性回归
    Python怎么实现线性回归,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1、概述(1)人工智能学习        &n...
    99+
    2023-06-26
  • AI人工智能 Python实现人机对话
    在人工智能进展的如火如荼的今天,我们如果不尝试去接触新鲜事物,马上就要被世界淘汰啦~ 本文拟使用Python开发语言实现类似于WIndows平台的“小娜”,或者是IOS下的“Siri”。最终达到人机对话的效...
    99+
    2022-06-04
    人工智能 人机 AI
  • pytorch实现线性回归
    pytorch实现线性回归代码练习实例,供大家参考,具体内容如下 欢迎大家指正,希望可以通过小的练习提升对于pytorch的掌握 # 随机初始化一个二维数据集,使用朋友torch...
    99+
    2022-11-12
  • python一元线性回归怎么实现
    在Python中,可以使用NumPy和Scikit-learn库来实现一元线性回归。以下是一元线性回归的实现步骤:1. 导入所需的库...
    99+
    2023-08-18
    python
  • python多元线性回归怎么实现
    在Python中,可以使用`scikit-learn`库来实现多元线性回归。首先,需要导入所需的库和模块:```pythonfrom...
    99+
    2023-08-18
    python
  • pytorch实现线性回归以及多元回归
    本文实例为大家分享了pytorch实现线性回归以及多元回归的具体代码,供大家参考,具体内容如下 最近在学习pytorch,现在把学习的代码放在这里,下面是github链接 直接附上g...
    99+
    2022-11-12
  • 怎么用python实现人工智能算法
    要使用Python实现人工智能算法,你可以按照以下步骤进行操作:1. 确定算法类型:首先,你需要确定你想要实现的人工智能算法类型,比...
    99+
    2023-10-11
    python 人工智能
  • Python人工智能实战之对话机器人的实现
    目录背景用到的技术主要流程代码模块Joke对象爬虫抓取笑话代码实现保存到sqlite数据库抓取笑话并保存到数据库背景 当我慢慢的开在高速公路上,宽敞的马路非常的拥挤!这时候我喜欢让...
    99+
    2022-11-13
  • python实现线性回归的示例代码
    目录1线性回归1.1简单线性回归1.2 多元线性回归1.3 使用sklearn中的线性回归模型1线性回归 1.1简单线性回归 在简单线性回归中,通过调整a和b的参数值,来拟合从x到...
    99+
    2022-11-13
  • 人工智能是是不是只能用python实现
    这篇文章主要介绍了人工智能是是不是只能用python实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、人工智能只能用python吗?并不是,只是相对其他语言python的...
    99+
    2023-06-14
  • pytorch怎样实现线性回归
    这篇文章给大家分享的是有关pytorch怎样实现线性回归的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。具体内容如下# 随机初始化一个二维数据集,使用朋友torch训练一个回归模型import ...
    99+
    2023-06-14
  • TensorFlow实现简单线性回归
    本文实例为大家分享了TensorFlow实现简单线性回归的具体代码,供大家参考,具体内容如下 简单的一元线性回归 一元线性回归公式: 其中x是特征:[x1,x2,x3,&helli...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作