回归问题预测一般用折线图进行可视化,去了解属性和属性值之间的变化,这里参考《预测分析核心算法》为教程做以整理,对属性值可视化进行描述。
数据情况
- 数据是预测鲍鱼年龄的回归问题。数据column分别为’Sex’(性别), ‘Length’(长度), ‘Diameter’(直径), ‘Height’(高度),’Whole Wt’(整体体重), ‘Shucked Wt’(去壳后重量),’Viscera Wt’(脏器重量), ‘Shell Wt’(壳的重量), ‘Rings’(环数)。
- 目标: 实现Ring标签的实数值(属性值)到颜色值的映射
代码实现
在归一化后对数据进行可视化
scale
import pandas as pd
import matplotlib.pyplot as plot
from math import exp
url = ("http://archive.ics.uci.edu/ml/machine-"
"learning-databases/abalone/abalone.data")
abalone = pd.read_csv(url, header = None, prefix="V")
abalone.columns = ['Sex', 'Length', 'Diameter', 'Height',
'Whole Wt', 'Shucked Wt',
'Viscera Wt', 'Shell Wt', 'Rings']
summary = abalone.describe()
minRings = summary.iloc[3, 7]
maxRings = summary.iloc[7, 7]
nrows = len(abalone.index)
#
for i in range(nrows):
datarow = abalone.iloc[i, 1:8]
labelColor = (abalone.iloc[i, 8] - minRings)/(maxRings - minRings)
datarow.plot(color=plot.cm.RdYlBu(labelColor),alpha=0.5)
plot.xlabel("Attribute index")
plot.ylabel("Attribute value")
plot.show()
这里可以看出每个属性和Ring的相关性。因为scale后数值被压缩导致颜色大多数集中
renormalize
meanRings = summary.iloc[1, 7]
stdRings = summary.iloc[2, 7]
for i in range(nrows):
dataRow = abalone.iloc[i, 1:8]
normTarget = (abalone.iloc[i, 8] - meanRings) / stdRings
labelColor = 1.0/(1.0 + exp(-normTarget))
dataRow.plot(color=plot.cm.RdYlBu(labelColor), alpha=0.5)
plot.show()
加上阶跃函数后颜色有明显的区分。从图上分析:
- 属性上整体重量和去壳后重量是两个重要属性
- 属性中不同颜色依然有区分(深浅不一)说明并不能完整预测环数Rings
- 然而其他属性能够很好将其分开如直径