python数据分析项目实战波士顿房价预测——简单线性回归
前言本篇文章仅仅使用了sklearn中的linear_model来进行预测模型,作为学习机器学习和数据分析的开始。接下来我会更加深入学习,为大家带来更好的文章。导入所需要的库from sklearn.datasets import load_boston # 数据集import pandas as pdfrom pandas import Series, DataFrameimport numpy
·
前言
本篇文章仅仅使用了sklearn中的linear_model来进行预测模型,作为学习机器学习和数据分析的开始。接下来我会更加深入学习,为大家带来更好的文章。
导入所需要的库
from sklearn.datasets import load_boston # 数据集
import pandas as pd
from pandas import Series, DataFrame
import numpy as np
import matplotlib.pyplot as plt
加载数据集和查看数据集
boston = load_boston()
print(boston['DESCR'])
Result:
观察样本数据得知一共有13个输入特征变量,MEDV是需要预测的结果
数据处理
x = boston.data
y = boston.target
feature_names = boston.feature_names
检查是否存在异常值并删除
检查y是否存在异常值
for i in range(len(y)):
plt.scatter(i, y[i])
plt.show()
Result:
由图中观察异常值为大于等于49和小于等于2左右
删除异常值
from sklearn import preprocessing
del_list = []
for i in range(num_data):
if(y[i] >= 49 or y[i] <= 2):
del_list.append(i) # 将索引值为异常值的下标放在一个list列表中
num_data -= len(del_list)
x = np.delete(x, del_list, axis=0)
y = np.delete(y, del_list, axis=0)
可视化分析
用matplotlib将数据绘制成可视图再进行数据异常值处理和选择相关特征。
绘散点图观察特征数据分布情况
plt.subplots(figsize=(20,10))
for i in range(num_feature):
plt.subplot(4,4,1+i) # 绘制4x4的subplot
plt.scatter(x[:,i],y,color='blueviolet')
plt.title(feature_names[i])
plt.show()
Result:
绘制直方图观察数据分布情况
plt.subplots(figsize=(30,10))
for i in range(num_feature):
plt.subplot(4,4,1+i)
plt.hist(x[:,i],color='lightseagreen',width=2)
plt.title(feature_names[i])
plt.show()
Result:
观察上图 "ZN, NOX, TAX, CHAS, B" 特征无明显特点,可以将其剔除
剔除无关的特征
del_feature = []
for i in range(num_feature):
if(feature_names[i] == 'ZN' or
feature_names[i] == 'NOX' or
feature_names[i] == 'TAX' or
feature_names[i] == 'CHAS' or
feature_names[i] == 'B'):
del_feature.append(i)
x = np.delete(x, del_feature, axis=1)
feature_names = np.delete(feature_names, del_feature)
Feature = ["CRIM", "INDUS", "RM", "AGE", "RAD", "PTRATIO" "LSTAT"]
num_feature -= len(del_feature)
分割数据集
from sklearn.model_selection import train_test_split
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.3) # 将训练集分割成7:3 训练集:预测集
归一化数据处理
使用MinMaxScaler进行归一化处理,能够加快训练过程。
from sklearn.preprocessing import MinMaxScaler, scale
scaler = MinMaxScaler()
x_train = scaler.fit_transform(x_train)
x_test = scaler.fit_transform(x_test)
y_train = scaler.fit_transform(y_train.reshape(-1,1)) # reshape将y_train转换成1列
y_test = scaler.fit_transform(y_test.reshape(-1,1))
线性回归分析
导入相关sklearn库
from sklearn import linear_model
from sklearn.metrics import mean_squared_error, r2_score # 用于MSE计算模型的误差、R2用于计算准确度
使用线性回归模型进行预测
model = linear_model.LinearRegression()
model.fit(x_train, y_train)
y_pred = model.predict(x_test)
print("MSE =",mean_squared_error(y_test, y_pred), end=' ')
print("R2 =",r2_score(y_test, y_pred))
可视化预测结果与实际结果
fig, ax = plt.subplots(figsize=(20,10))
ax.scatter(y_test, y_pred, edgecolors="aqua")
ax.plot([y_test.min(), y_test.max()], [y_test.min(), y_test.max()], 'k', lw=2, color='navy')
ax.set_xlabel('Real Value')
ax.set_ylabel('Predicted Value')
plt.show()
OUT:
预测结果虽然并不是很理想,但作为我们入门机器学习和数据分析是一个很好的开始,加油~
希望这篇文章对大家的学习有所帮助!
更多推荐
已为社区贡献9条内容
所有评论(0)