python一元三次方程拟合_《Python与机器学习》笔记(15)

监督学习

多项式回归+房价与房屋尺寸关系的非线性拟合

多项式回归

4d0b7a680ea43b763628cadd70a27c18.png

多项式回归

  • 在一元回归分析中,如果依变量y与自变量x的关系为非线性的,但是又找不到适当的函数曲线来拟合,则可以采用一元多项式回归。
  • 多项式回归的最大优点就是可以通过增加x的高次项对实测点进行逼近,直至满意为止。
  • 事实上,多项式回归可以处理相当一类非线性问题,它在回归分析中占有重要的地位,因为任一函数都可以分段用多项式来逼近。

之前提到的线性回归实例中,是运用直线来拟合数据输入与输出之间的线性关系。不同于线性回归,多项式回归是使用曲线拟合数据的输入与输出的映射关系。

de47d7b90b9a74574ae7883a879e8c95.png

多项式回归的应用

目标:对房屋成交信息建立多项式回归方程,并依据回归方程对房屋价格进行预测

应用背景:我们在前面已经根据已知的房屋成交价和房屋的尺寸进行了线性回归,继而可以对已知房屋尺寸,而未知房屋成交价格的实例进行了成交价格的预测,但是在实际的应用中这样的拟合往往不够好,因此我们在此对该数据集进行多项式回归。

技术路线sklearn.preprocessing.PolynomialFeatures

实例数据

成交信息包括房屋的面积以及对应的成交价格:

  • 房屋面积单位为平方英尺(ft2)
  • 房屋成交价格单位为万

d9ce9dd9840345871c536957b4422848.png

7360a0d60c88db2bb64cd00b29209dce.png

a81148cd7eeab569137bea9724256408.png

325a25068c4c93e10920c70918e029c5.png

e292b0277c100b0063fee158ee62c471.png

671da32c647a9a0823e50b8ca64ec089.png

ebe9c0bec561cafb3c1c7c51ebefaaaf.png

d783b94ca929419fd743068cf24042b1.png

c9088165f0905bf93f4f0fe283d39e20.png

425ec7d7f57c1bbe5bb59fd7af7f3438.png

完整代码:

#!/usr/bin/env python
# _*_ coding: utf-8 _*_
"""
 @author: antenna
 @license: (C) Copyright 2019, Antenna.
 @contact: lilyef2000@gmail.com
 @software: 
 @file: polynomial-test.py
 @time: 2019/4/10 11:28
 @desc:
"""
import matplotlib.pyplot as plt
import numpy as np
from sklearn import linear_model
from sklearn.preprocessing import PolynomialFeatures

# 读取数据集
datasets_X = []
datasets_Y = []
fr = open('prices.txt', 'r')
lines = fr.readlines()
for line in lines:
    items = line.strip().split(',')
    datasets_X.append(int(items[0]))
    datasets_Y.append(int(items[1]))

length = len(datasets_X)
datasets_X = np.array(datasets_X).reshape([length, 1])
datasets_Y = np.array(datasets_Y)

minX = min(datasets_X)
maxX = max(datasets_X)
X = np.arange(minX, maxX).reshape([-1, 1])

poly_reg = PolynomialFeatures(degree=2)
X_poly = poly_reg.fit_transform(datasets_X)
lin_reg_2 = linear_model.LinearRegression()
lin_reg_2.fit(X_poly, datasets_Y)

# 图像中显示
plt.scatter(datasets_X, datasets_Y, color='red')
plt.plot(X, lin_reg_2.predict(poly_reg.fit_transform(X)), color='blue')
plt.xlabel('Area')
plt.ylabel('Price')
plt.show()

de3744a57189b74b86e5f582004f9a3d.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值