机器学习一(回归预测)

这篇博客首先介绍了回归预测的基本概念,并通过Python的statsmodels库进行了传统统计学回归方法的实现。接着,博主使用多种机器学习模型,如线性回归、Lasso和ElasticNet等,对波士顿房价数据集进行建模,比较了不同模型的性能。通过交叉验证和参数调优,最终选择了集成算法中的极端树回归模型,该模型在训练和测试集上均表现出良好的预测能力。
摘要由CSDN通过智能技术生成

# -*- coding: utf-8 -*-
"""
Created on Mon Aug  6 08:48:58 2018

@author: wangxihe
"""
#%%首先我们使用传统的统计学回归方法,然后在使用多中机器学习
#数据说明
#CRIM:城镇人均犯罪率。
#ZN:住宅用地超过 25000 sq.ft. 的比例。
#INDUS:城镇非零售商用土地的比例。
#CHAS:查理斯河空变量(如果边界是河流,则为1;否则为0)。
#NOX:一氧化氮浓度。
#RM:住宅平均房间数。
#AGE:1940 年之前建成的自用房屋比例。
#DIS:到波士顿五个中心区域的加权距离。
#RAD:辐射性公路的接近指数。
#TAX:每 10000 美元的全值财产税率。
#PTRATIO:城镇师生比例。
#B:1000(Bk-0.63)^ 2,其中 Bk 指代城镇中黑人的比例。
#LSTAT:人口中地位低下者的比例。
#MEDV:自住房的平均房价,以千美元计。
#%%
import pandas as pd
import numpy as np
import statsmodels.api as sm
from statsmodels.formula.api import ols
import statsmodels.formula.api as smf
from scipy import stats
import seaborn as sns
import matplotlib.pyplot as plt
import os
from sklearn.model_selection import train_test_split

n_fold=10
seed=7
scoring='neg_mean_squared_error'

os.chdir('E:\spyderwork\wxh\数据科学\线性回归')

names = ['CRIM','ZN','INDUS','CHAS','NOX','RM','AGE','DIS','RAD','TAX','PRTATIO','B','LSTAT','MEDV']
hprice =pd.read_csv('housing.csv', names=names, delim_whitespace=True)

X=hprice.ix[:,0:13].copy()
Y=hprice.ix[:,13].copy()
train,test,train_y,test_y=train_test_split(X,Y,test_size=0.2,random_state=seed)
len(train)
len(train_y)
dfy=pd.DataFrame(train_y,columns=['MEDV'])
traindata=pd.concat([train,dfy], axis=1)

dftesty=pd.DataFrame(test_y,columns=['MEDV'])
testdata=pd.concat([test,dftesty], axis=1)

#%%
#分类变量
var_c=['CHAS','RAD']
#连续变量相关性检查
var_d=['MEDV','CRIM','ZN','INDUS','NOX','RM','AGE','DIS','TAX','PRTATIO','B','LSTAT']
corr=hprice[var_d].corr()
sns.heatmap(corr)
#%%
# 利用众数减去中位数的差值除以四分位距来查找是否有可能存在异常值
abs((X[var_d[1:]].mode().iloc[0,] - X[var_d[1:]].median()) /
    (X[var_d[1:]].quantile(0.75) - X[var_d[1:]].quantile(0.25)))
#%%分类变量
CHAST=hprice.CHAS.value_counts()
CHAST.plot(kind='bar')
#双样本T检验
#二分类双样本T检验
CHAS0=hprice[hprice['CHAS']==0]['MEDV']
CHAS1=hprice[hprice['CHAS']==1]['MEDV']
#方差齐性检验
leveneTest=stats.levene(CHAS0,CHAS1,center='median')
print('w-value=%6.4f, p-value=%6.4f' %leveneTest)
stats.stats.ttest_ind(CHAS0,CHAS1,equal_var=False) #显著
#多分类方差分析
RADT=hprice.RAD.value_counts()
RADT.sort_values().plot(kind='barh')
sm.stats.anova_lm(ols('MEDV~C(RAD)',data=hprice).fit())#显著
#%%共线性
def vif(df, col_i):
    cols = list(df.columns)
    cols.remove(col_i)
    cols_noti = cols
    formula = c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值