线性回归算法 python实现

线性回归算法 python实现

Python 机器学习入门之线性回归


前言

随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。

一、线性回归是什么?

在这里插入图片描述

让我们通过一个例子来开始:这个例子是预测住房价格的,我们要使用一个数据集,数据集包含一个市的住房价格。在这里,我要根据不同房屋尺寸所售出的价格,画出我的数据集。比方说,如果你朋友的房子是1250平方尺大小,你要告诉他们这房子能卖多少钱。那么,你可以做的一件事就是构建一个模型,也许是条直线。

二、Python实现

1.引入库

代码如下(示例):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

2.读入数据

代码如下(示例):

path = "ex1data1.txt"
data = pd.read_csv(path, header=None, names=["Population", "Profit"])
data.head()
data.plot(kind='scatter', x='Population', y='Profit', figsize=(12, 8))
data.insert(0, 'Ones', 1)

这个数据集我会在文章末尾给出。


## 3.具体实现

代码如下(示例):

cols = data.shape[1]
X = data.iloc[:, 0:cols - 1]
y = data.iloc[:, cols - 1:cols]
X = np.array(X.values)
y = np.array(y.values)
theta = np.array([0, 0]).reshape(1, 2)
print(X.dot(theta.T))


# 计算代价函数
def compute_cost(X, y, theta):
    inner = np.power(((X.dot(theta.T)) - y), 2)  # 后面的2表示2次幂
    return sum(inner) / (2 * len(X))


# 梯度下降函数
def gradient_descent(X, y, theta, alpha, epoch=1000):
    cost = np.zeros(epoch)
    m = X.shape[0]  # 获得样本数量
    for i in range(epoch):
        # 利用向量化同步计算theta值
        # 注意theta是一个行向量
        temp = theta - (alpha / m) * (X.dot(theta.T) - y).T.dot(X)  # 得出一个theta行向量
        theta = temp
        cost[i] = compute_cost(X, y, theta)  # 这个函数中,theta是变量,X,y是已知量
    return theta, cost  # 迭代结束之后返回theta和cost值


alpha = 0.01
epoch = 2000
final_theta, cost = gradient_descent(X, y, theta, alpha, epoch)
print(final_theta, cost)
population = np.linspace(data.Population.min(), data.Population.max(), 100)  # 横坐标
profit = final_theta[0, 0] + (final_theta[0, 1] * population)  # 纵坐标,利润

fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(population, profit, 'r', label='Prediction')
ax.scatter(data['Population'], data['Profit'], label='Training data')
ax.legend(loc=4)  # 4表示标签在右下角
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Prediction Profit by. Population Size')
plt.show()

fig, ax = plt.subplots(figsize=(8, 6))
ax.plot(np.arange(epoch), cost, 'r')
ax.set_xlabel('Iteration')
ax.set_ylabel('Cost')
ax.set_title('Error vs. Traning Epoch')
plt.show()

这个地方是采用的矩阵的方式来同步处理的两个theta的值


实验结果


从这个地方可以看出这个假设函数和数据是拟合的。
在这里插入图片描述
由此可以看出梯度下降也是运行正确的 代价逐渐变小。
在这里插入图片描述
数据集:
6.1101,17.592
5.5277,9.1302
8.5186,13.662
7.0032,11.854
5.8598,6.8233
8.3829,11.886
7.4764,4.3483
8.5781,12
6.4862,6.5987
5.0546,3.8166
5.7107,3.2522
14.164,15.505
5.734,3.1551
8.4084,7.2258
5.6407,0.71618
5.3794,3.5129
6.3654,5.3048
5.1301,0.56077
6.4296,3.6518
7.0708,5.3893
6.1891,3.1386
20.27,21.767
5.4901,4.263
6.3261,5.1875
5.5649,3.0825
18.945,22.638
12.828,13.501
10.957,7.0467
13.176,14.692
22.203,24.147
5.2524,-1.22
6.5894,5.9966
9.2482,12.134
5.8918,1.8495
8.2111,6.5426
7.9334,4.5623
8.0959,4.1164
5.6063,3.3928
12.836,10.117
6.3534,5.4974
5.4069,0.55657
6.8825,3.9115
11.708,5.3854
5.7737,2.4406
7.8247,6.7318
7.0931,1.0463
5.0702,5.1337
5.8014,1.844
11.7,8.0043
5.5416,1.0179
7.5402,6.7504
5.3077,1.8396
7.4239,4.2885
7.6031,4.9981
6.3328,1.4233
6.3589,-1.4211
6.2742,2.4756
5.6397,4.6042
9.3102,3.9624
9.4536,5.4141
8.8254,5.1694
5.1793,-0.74279
21.279,17.929
14.908,12.054
18.959,17.054
7.2182,4.8852
8.2951,5.7442
10.236,7.7754
5.4994,1.0173
20.341,20.992
10.136,6.6799
7.3345,4.0259
6.0062,1.2784
7.2259,3.3411
5.0269,-2.6807
6.5479,0.29678
7.5386,3.8845
5.0365,5.7014
10.274,6.7526
5.1077,2.0576
5.7292,0.47953
5.1884,0.20421
6.3557,0.67861
9.7687,7.5435
6.5159,5.3436
8.5172,4.2415
9.1802,6.7981
6.002,0.92695
5.5204,0.152
5.0594,2.8214
5.7077,1.8451
7.6366,4.2959
5.8707,7.2029
5.3054,1.9869
8.2934,0.14454
13.394,9.0551
5.4369,0.61705

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值