前言

本篇文章仅仅使用了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:
在这里插入图片描述
预测结果虽然并不是很理想,但作为我们入门机器学习和数据分析是一个很好的开始,加油~


希望这篇文章对大家的学习有所帮助!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐