【Python数据分析】波士顿房价分析小例子

    %matplotlib inline             #将生成的图片嵌入网页中
    import matplotlib.pyplot as plt
    from sklearn import datasets
    from sklearn.feature_selection import SelectKBest,f_regression
    from sklearn.linear_model import LinearRegression              #导入先行回归模型
    from sklearn.svm import SVR                                    #导入svm模型
    from sklearn.ensemble import RandomForestRegressor             #导入随机森林模型
[/code]

我们用到的模块有matplotlib可视化,还有sklearn机器学习模块,其中也用到了LinearRegression线性回归模型、SVM(支持向量机)回归模型和RandomForestRegressor随机森林模型。

  * 线性回归:,线性回归(Linear Regression)是利用称为线性回归方程的最小平方函数对一个或多个 [ 自变量 ](https://baike.baidu.com/item/%E8%87%AA%E5%8F%98%E9%87%8F) 和 [ 因变量 ](https://baike.baidu.com/item/%E5%9B%A0%E5%8F%98%E9%87%8F) 之间关系进行建模的一种 [ 回归分析 ](https://baike.baidu.com/item/%E5%9B%9E%E5%BD%92%E5%88%86%E6%9E%90) 。这种函数是一个或多个称为回归系数的模型参数的线性组合。只有一个自变量的情况称为简单回归,大于一个自变量情况的叫做多元回归。 
  * 支持向量机:支持向量机(SVM,还支持矢量网络)是与相关的学习算法有关的监督学习模型,可以分析数据,识别模式,用于分类和回归分析。给定一组训练样本,每个标记为属于两类,一个SVM训练算法建立了一个模型,分配新的实例为一类或其他类,使其成为非概率二元线性分类。 
  * 随机森林:随机森林是一种多功能的机器学习算法,能够执行回归和分类的任务。同时,它也是一种数据降维手段,用于处理缺失值、异常值以及其他数据探索中的重要步骤,并取得了不错的成效。 

###  二、加载数据

```code
    boston_data = datasets.load_boston()
    x_full = boston_data.data               #加载load_boston()中所有数据,一共有506条记录,13条特征(变量)
    y = boston_data.target             #加载load_boston()中的目标值,即标签
    print(x_full.shape)
    print(y.shape)
    
    #输出:
    (506, 13)
    (506,)
[/code]

我们加载机器学习模块sklearn中自带的数据load_boston()波士顿房价数据。这一步也可以对数据进行初步的分析,.data加载数据中的所有记录,.target查看数据中的目标值,即标签。然后用.shape查看所有记录和目标值的维度,可以看到一共有506条记录,13条特征,也就是有506条目标值,在这里目标值指的是房价。

###  三、转换和分析

```code
    selector = SelectKBest(f_regression,k=1)            #选出相关性最强的SelectKBest类作为特征
    selector.fit(x,y)                                   #采用fit()方法进行数据拟合
    x = x_full[:,selector.get_support()]                     #采用get_support()将数据缩减成一个向量,即数据降维
    print(x.shape)
    
    #输出:
    (506, 1)
[/code]

在这一步,我们用SelectKBest类选出相关性最强的一个特征,也就是一个向量。采用fit()方法将数据拟合,然后用get_support()将数据缩减成一个向量,即数据降维。

###  四、可视化

```code
    def plot_scatter(x,y,R=None):
        plt.scatter(x,y,s=32,marker='o',facecolors='blue')
        if R is not None:
            plt.scatter(x,R,color='red',linewidth=0.5)
    plt.show()
    
    plot_scatter(x,y)
[/code]

由于目标是一个向量,所以我们可以看看输入(特征)和输出(房价)之间是都存在线性关系。

![](https://img-
blog.csdn.net/2018090317495170?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NTRE5fZnpz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

根据输出的结果,我们可以看到随着x的增加,y在减少,但是这种变化比率不是恒定的。这是一个非线性情况,我们可以利用一个回归模型进一步将它可视化。

###  五、模型分析

```code
    #线性回归模型
    regressor = LinearRegression(normalize=True).fit(x,y)                  
    plot_scatter(x,y,regressor.predict(x))
[/code]

![](https://img-
blog.csdn.net/20180903175421675?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NTRE5fZnpz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

这一步,我们创建并训练了一个线性回归模型,红色画出了输入和输出之间的最佳线性关系。很显然我们看到这个效果并不是很好,它只是一个近似值。

接下来我们看看支持向量机和随机森林的模型效果。

```code
    #SVM回归模型
    regressor = SVR().fit(x,y)
    plot_scatter(x,y,regressor.predict(x))
[/code]

![](https://img-
blog.csdn.net/20180903175934307?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NTRE5fZnpz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

支持向量机是一种用来解决非线性问题的模型,可以看到在这种情况下,支持向量机的效果比线性回归的效果更好一点。

最后再看看随机森林。

```code
    #随机森林回归模型
    regressor =RandomForestRegressor().fit(x,y)
    plot_scatter(x,y,regressor.predict(x))
[/code]

![](https://img-
blog.csdn.net/20180903180216917?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L0NTRE5fZnpz/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)

我们看到这种情况下利用随机森林的效果比前面两个好多了,随机森林是一种四栋解决非线性问题的模型。


![在这里插入图片描述](https://img-blog.csdnimg.cn/20210608151750993.gif)

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值