`
vinking934296
  • 浏览: 107297 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

python sklearn-02:线性回归简单例子1

阅读更多

原文链接:https://muxuezi.github.io/posts/2-linear-regression.html

1.一元线性回归:

#一元线性回归:

预测披萨的价格:数据如下:


 

import matplotlib.pyplot as plt
from matplotlib.font_manager import FontProperties

#这个属性设置是让matplot画图时显示中文的标签
font = FontProperties(fname=r"C:\Windows\Fonts\msyh.ttc",size=15)

#定义画图函数
def runplt():
    plt.figure()
    plt.title('披萨价格与直径数据',fontproperties=font)
    plt.xlabel('直径(英寸)',fontproperties=font)
    plt.ylabel('价格(美元)',fontproperties=font)
    plt.axis([0,25,0,25],fontproperties=font)
    plt.grid(True)
    return plt

#训练集数据
X = [[6], [8], [10], [14], [18]]
y = [[7], [9], [13], [17.5], [18]]

#导入一元线性回归函数:y = α + βx
from sklearn.linear_model import  LinearRegression
model = LinearRegression()
model.fit(X,y)  #训练集数据放入模型中
print ('预测一张12英寸披萨价格:$%.2f' % model.predict([12])) 


plt = runplt()
X2 = [[0],[10],[14],[25]]
y2 = model.predict(X2)  #预测数据
plt.plot(X,y,'k.')
plt.plot(X2,y2,'g-')

#残差预测值
yr = model.predict(X)
for idx,x in enumerate(X):
    plt.plot([x,x], [y[idx], yr[idx]],'r-')

plt.show()

 图如下:



 解一元线性方程:

 

#解一元线性回归:这里用最小二乘法 
#LinearRegression类的fit()方法学习下面的一元线性回归模型:y = α + βx 
#β =cov(x, y)/var(x) (协方差/方程)   α = y¯ − βx¯

import numpy as np

var =np.var([6, 8, 10, 14, 18], ddof=1) 
print ('方差为%.2f'%var)
cov = np.cov([6, 8, 10, 14, 18], [7, 9, 13, 17.5, 18])[0][1]
print ('协方差为%.2f'%cov)
b = cov/var
a = np.mean(y)-b*np.mean(X)
print ('方程为 y = %.2f x - %.2f'%(a,b))

#输出结果
方差为23.20
协方差为22.65
方程为 y = 1.97 x - 0.98

 评估这个模型的预测准确度,这里引入测试集:

 

#模型评估:R方也叫确定系数,表示模型对现实数据的拟合程度。一定是介于0~1间的数
#引入测试集
X_test = [[8], [9], [11], [16], [12]]
y_test = [[11], [8.5], [15], [18], [11]]
r2 = model.score(X_test,y_test)
print ('R^2 = %.2f'%r2)

#输出结果
R^2 = 0.66

 看起来确定系数不高,那我们来试下多元回归,看看效果如何

2.多元线性回归:

现实中披萨价格的影响因素应该不止直径一个,这里引入了辅料的因素,数据更新如下:

训练集数据:



 

测试集数据:


 

#多元回归 
#y = α + β1x1 + β2x2 + ⋯ + βnxn,写成矩阵形式 Y = Xβ,其中, 是训练集的响应变量列向量,是模型
#参数列向量。 称为设计矩阵,是 维训练集的解释变量矩阵。 是训练集样本数量, 是解释变量个数
import matplotlib.pyplot as plt
from sklearn.linear_model import  LinearRegression

font = FontProperties(fname=r"C:\Windows\Fonts\msyh.ttc",size=15)

def runplt():
    plt.figure()
    plt.title('披萨价格与直径数据',fontproperties=font)
    plt.xlabel('直径(英寸)',fontproperties=font)
    plt.ylabel('价格(美元)',fontproperties=font)
    plt.axis([0,25,0,25],fontproperties=font)
    plt.grid(True)
    return plt

#训练集,一元线性回归模型训练
X = [[6, 2], [8, 1], [10, 0], [14, 2], [18, 0]]
y = [[7], [9], [13], [17.5], [18]]
model = LinearRegression()
model.fit(X,y)

#测试集,及预测
X_test = [[8, 2], [9, 0], [11, 2], [16, 2], [12, 0]]
y_test = [[11], [8.5], [15], [18], [11]]
predictions = model.predict(X_test)

#确定性系数计算
print ('R^2 为 %.2f' %model.score(X_test, y_test))

#画图
plt.title('多元回归实际值与预测值',fontproperties=font)
plt.plot(y_test,label='y_test')
plt.plot(predictions,label='predictions')
plt.legend()


#结果输出:
R^2 为 0.77

 图如下:

 看到确定性系数比只有直径一个因素时高,拟合效果比较好。

3.多项式回归:二次回归:

从训练集原始数据的散点图来看:其实也有可能是一个曲线模型,这里试下二次回归的效果



 还是用只有直径一个因素的训练集数据,
二次回归(Quadratic Regression),y = α + β1x + β2x^2,我们有一个解释变量,但是模型有三项,通过第三项(二次项)来实现曲线关系,PolynomialFeatures转换器可以用来解决这个问题。

 

#多项式回归
#二次回归(Quadratic Regression),y = α + β1x + β2x2,我们有一个解释变量,但是模型有三项,通过第三项(二次项)来实现曲线关系

import numpy as np
from sklearn.linear_model import  LinearRegression
from sklearn.preprocessing import  PolynomialFeatures

font = FontProperties(fname=r"C:\Windows\Fonts\msyh.ttc",size=15)

def runplt():
    plt.figure()
    plt.title('披萨价格与直径数据',fontproperties=font)
    plt.xlabel('直径(英寸)',fontproperties=font)
    plt.ylabel('价格(美元)',fontproperties=font)
    plt.axis([0,25,0,25],fontproperties=font)
    plt.grid(True)
    return plt

X_train = [[6], [8], [10], [14], [18]]
y_train = [[7], [9], [13], [17.5], [18]]
X_test = [[6], [8], [11], [16]]
y_test = [[8], [12], [15], [18]]

plt = runplt()
regressor = LinearRegression()
regressor.fit(X_train,y_train)
xx = np.linspace(0, 26, 100)
yy = regressor.predict(xx.reshape(xx.shape[0], 1))
plt.plot(X_train, y_train, 'k.')
plt.plot(xx, yy)

#构造第三项
quadratic_fearurizer = PolynomialFeatures(degree=2)
X_train_quadratic = quadratic_fearurizer.fit_transform(X_train)
X_test_quadratic = quadratic_fearurizer.transform(X_test)
regressor_quadratic = LinearRegression()
regressor_quadratic.fit(X_train_quadratic, y_train)
xx_quadratic = quadratic_fearurizer.transform(xx.reshape(xx.shape[0],1))
plt.plot(xx,regressor_quadratic.predict(xx_quadratic),'r-')
plt.show()
print ('一元线性回归 r^2: %.2f'%regressor.score(X_test,y_test))
print('二次回归 r^2: %.2f'%regressor_quadratic.score(X_test_quadratic, y_test))

结果如下:




从r^2 看起来二次回归效果比线性回归好。那么三次回归,四次回归效果会不会更好呢?我们来试下:

#多项式回归
from sklearn.linear_model import  LinearRegression
from sklearn.preprocessing import  PolynomialFeatures
import matplotlib.pyplot as plt

X_train = [[6], [8], [10], [14], [18]]
y_train = [[7], [9], [13], [17.5], [18]]
X_test = [[6], [8], [11], [16]]
y_test = [[8], [12], [15], [18]]


k_range = range(2,10)
k_scores = []

regressor = LinearRegression()
regressor.fit(X_train,y_train)
k_scores.append (regressor.score(X_test,y_test))

for k in k_range:
    k_featurizer = PolynomialFeatures(degree=k)
    X_train_k = k_featurizer.fit_transform(X_train)
    X_test_k = k_featurizer.transform(X_test)
    regression_k = LinearRegression()
    regression_k.fit(X_train_k,y_train)
    k_scores.append(regression_k.score(X_test_k,y_test))

for i in range(0,8):
    print('%d 项式 r^2 是 %.2f'%(i+1,k_scores[i]))    

plt.plot([1,2,3,4,5,6,7,8,9],k_scores)
plt.show()

 结果如下:


 
 1项式就是线性回归啦,从r^2的图来看,并不是项式越多效果越好,在二项式时拟合效果最高。后面的那些情况较多过度拟合,
这种模型并没有从输入和输出中推导出一般的规律,而是记忆训练集的结果,这样

在测试集的测试效果就不好了。是有一些方式可以避免这种情况的。后面再慢慢学习。酷

  • 大小: 20.3 KB
  • 大小: 20.9 KB
  • 大小: 12.4 KB
  • 大小: 29 KB
  • 大小: 28 KB
  • 大小: 14.3 KB
  • 大小: 23.1 KB
  • 大小: 20.2 KB
分享到:
评论

相关推荐

    sklearn+python:线性回归案例

    在这个案例中,我们使用Python的机器学习库scikit-learn(sklearn)来实现线性回归模型,以预测波士顿地区的房价。 首先,我们需要导入必要的库,包括`load_boston`来获取波士顿房价数据集,`train_test_split`来...

    python3机器学习sklearn之线性回归

    【Python3机器学习sklearn之线性回归】是机器学习领域常用的一种算法,它通过数理统计中的回归分析,寻找自变量(input variables)与因变量(output variable)之间的定量关系。线性回归模型利用最小二乘法来构建一...

    利用sklearn实现机器学习算法:线性回归、逻辑回归、决策树、随机森林、SVM等

    在机器学习领域,Sklearn(Scikit-learn)是一个广泛使用的Python库,它提供了各种算法,包括线性回归、逻辑回归、决策树、随机森林以及支持向量机(SVM)。这些模型对于预测分析和模式识别至关重要。让我们逐一探讨...

    对python sklearn one-hot编码详解

    这两个调用会将新数据转化为one-hot编码的向量,例如,对于特征值[0, 1, 3],编码结果将会是[1, 0, 0, 1, 0, 0, 0, 1, 0],因为它对应于特征1取值1,特征2取值1,特征3取值3。 `n_values_`属性可以获取每个特征的...

    线性回归的python例子

    线性回归简单易用,但在处理非线性关系时可能效果不佳。为改善模型,可以尝试多项式回归、岭回归或Lasso回归等方法。此外,如果数据集中存在多重共线性或异常值,还需要进行特征缩放、主成分分析(PCA)或其他预处理...

    机器学习中线性回归的例子,python代码编写.rar

    在这个例子中,我们将探讨如何使用Python编程语言实现线性回归。Python因其强大的数据处理能力和丰富的科学计算库,如NumPy、Pandas和Scikit-Learn,而成为数据科学和机器学习的首选语言。 线性回归假设输入特征与...

    python线性回归实用教程带注释.rar

    下面是一个使用 `sklearn` 的简单线性回归例子: ```python from sklearn.model_selection import train_test_split from sklearn.linear_model import LinearRegression from sklearn.metrics import mean_squared...

    分享一下利用sklearn进行线性回归与梯度下降算法代码实践

    本篇内容介绍了如何使用`sklearn`库进行线性回归分析,并通过一个简单的例子展示了整个流程,包括数据准备、模型训练、模型预测及评估。此外,还简要提到了梯度下降算法的概念及其在机器学习中的应用。这些知识点...

    python sklearn库实现简单逻辑回归的实例代码

    Scikit-learn(简称 sklearn)是一个基于 Python 的开源机器学习库,它为多种机器学习算法提供了简单且高效的实现方式。sklearn 提供了丰富的功能,涵盖了监督学习、无监督学习、半监督学习以及强化学习等多个领域。...

    线性回归python demo

    在这个“线性回归Python demo”中,我们将深入探讨如何使用Python实现线性回归算法,并通过实际代码示例来理解其工作原理。 首先,我们需要导入必要的库。Python提供了许多用于数据处理和机器学习的库,如NumPy用于...

    Python 实现一元线性回归 Jupyter Notebook 源代码和数据.zip

    在给定的资料中,“Python实现一元线性回归Jupyter Notebook源代码和数据.zip”提供了一个在Jupyter Notebook环境下使用Python编程语言实现一元线性回归的实例。Jupyter Notebook是一个交互式的笔记本,结合了代码、...

    python编程线性回归代码示例

    用python进行线性回归分析非常方便,有现成的库可以使用比如:numpy.linalog.lstsq例子、scipy.stats.linregress例子、pandas.ols例子等。 不过本文使用sklearn库的linear_model.LinearRegression,支持任意维度,...

    Python使用线性回归简单预测数据

    在本文中,我们将探讨如何使用Python的线性回归进行简单预测,包括预测房价和处理数据集中的缺失值。 首先,我们来看一个实例,即预测房子的价格。在这个问题中,自变量是房屋的平方英尺(`square_feet`),因变量...

    python代码实例-大数据线性回归预测学生成绩.zip

    在这个例子中,我们可能会用到`pandas`用于数据处理,`numpy`进行数值计算,以及`sklearn`库中的线性回归模型。 2. **数据预处理**:在使用线性回归之前,通常需要对数据进行预处理,包括清洗(去除缺失值、异常值...

    SKlearn数据集.zip

    通过这些数据集,初学者可以快速上手机器学习,熟悉各种算法如线性回归、逻辑回归、决策树、随机森林、支持向量机、K近邻、神经网络等。同时,它们也适合进阶者用来评估和比较不同模型的性能,优化参数,或者探索新...

    python多元线性回归预测数据

    在Python编程语言中,多元线性回归是一种广泛用于预测分析的方法。它允许我们根据多个自变量(输入特征)来预测一个连续的目标变量。在本案例中,我们将利用TensorFlow 2.3.0这一强大的深度学习库来实现多元线性回归...

    PLinearRegression:Scikit-Learn的线性回归扩展了p值

    P线性回归Scikit-Learn的线性回归扩展了p值。 “……零假设在实验过程中从未得到证明或建立,但有可能被反证。每个实验都可以说是存在的,只是给事实提供了反零假设的机会。” -RA Fisher 背景的人们熟悉和而Python...

    一元线性回归示例—房价预测

    在Python编程环境中,我们可以使用强大的机器学习库scikit-learn(简称sklearn)来实现一元线性回归。首先,我们需要导入必要的库,包括numpy(用于数值计算)、pandas(用于数据处理)和matplotlib(用于数据可视化...

Global site tag (gtag.js) - Google Analytics