Python机器学习3

记录一些常用的性能评价指标

预测模型 (均方误差(MSE)以及平均绝对错误(MAE) )
from math import sqrt
   #自己构建实际和预测数据
target = [1.5, 2.1, 3.3, -4.7, -2.3, 0.75]
prediction = [0.5, 1.5, 2.1, -2.2, 0.1, -0.5]

   #计算每一个差异
error = []
for i in range(len(target)):
    error.append(target[i] - prediction[i])

##RMSE,MSE
squaredError = []
absError = []
for val in error:
    squaredError.append(val*val)
    absError.append(abs(val))
    
print("RMSE = ", sqrt(sum(squaredError)/len(squaredError)))
print("MAE = ", sum(absError)/len(absError))
来个例子回归预测评估
import urllib.request
import numpy
from sklearn import  linear_model
from math import sqrt
import matplotlib.pyplot as plt
 
#从网页中读取数据
target_url = ("http://archive.ics.uci.edu/ml/machine-learning-databases/wine-quality/winequality-red.csv")
data = urllib.request.urlopen(target_url)


xList = []
labels = []
names = []
firstLine = True
for line in data:
    if firstLine:
        names = str(line, encoding='utf-8').strip().split(";")   ##utf-8编码
        firstLine = False
    else:
        row = str(line, encoding='utf-8').strip().split(";")
        labels.append(float(row[-1]))          ##数据集最后一列是标签
        row.pop()                                       ##pop剔除标签
        floatRow = [float(num) for num in row]           ##无标签数据
        xList.append(floatRow)

##拆分训练集和测试集 编号能整除3的当成测试集
indices = range(len(xList))
xListTest = [xList[i] for i in indices if i%3 == 0 ]
xListTrain = [xList[i] for i in indices if i%3 != 0 ]
labelsTest = [labels[i] for i in indices if i%3 == 0]
labelsTrain = [labels[i] for i in indices if i%3 != 0]

##转成np array格式方便计算
xTrain = numpy.array(xListTrain); yTrain = numpy.array(labelsTrain)
xTest = numpy.array(xListTest); yTest = numpy.array(labelsTest)

##岭回归参数可选域
alphaList = [0.1**i for i in [0,1, 2, 3, 4, 5, 6]]

##不能alphaList看下RMSE的变化
rmsError = []
for alph in alphaList:
     wineRidgeModel = linear_model.Ridge(alpha=alph)
     wineRidgeModel.fit(xTrain, yTrain)
     rmsError.append(numpy.linalg.norm((yTest-wineRidgeModel.predict(
     xTest)), 2)/sqrt(len(yTest)))

print("RMS Error alpha")
for i in range(len(rmsError)):
   print(rmsError[i], alphaList[i])

画图看下MSE随参数alphaList的变化情况
x = range(len(rmsError))
plt.plot(x, rmsError, 'k')
plt.xlabel('-log(alpha)')
plt.ylabel('Error (RMS)')
plt.show()

##找出最好的参数alphaList(MSE最小所对应的)进行训练预测
indexBest = rmsError.index(min(rmsError))
alph = alphaList[indexBest]
wineRidgeModel = linear_model.Ridge(alpha=alph)
wineRidgeModel.fit(xTrain, yTrain)
errorVector = yTest-wineRidgeModel.predict(xTest)
plt.hist(errorVector)
plt.xlabel("Bin Boundaries")
plt.ylabel("Counts")
plt.show()

##把上面的MSE套过来用
error = []
for i in range(len(yTest)):
    error.append(yTest[i] - wineRidgeModel.predict(xTest)[i])

##RMSE,MSE
squaredError = []
absError = []
for val in error:
    squaredError.append(val*val)
    absError.append(abs(val))


print("RMSE = ", sqrt(sum(squaredError)/len(squaredError)))
print("MAE = ", sum(absError)/len(absError))

image.png
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 样本误差:衡量模型在一个样本上的预测准确性样本误差 = 样本预测值 - 样本实际值 最常用的评价指标:均误差方(M...
    清梦载星河阅读 1,481评论 0 0
  • 线性回归+回归算法的评价指标 回归问题的判定目标值是连续性的值,而分类问题的目标值是离散型的值。 回归处理的问题为...
    浅笑_7cad阅读 2,310评论 0 0
  • 机器学习常用评价指标 在机器学习任务中,如何对模型的好坏对模型的优化/定量评价/改进具有重大的作用,通过不同的指标...
    DrownJoe阅读 1,177评论 0 1
  •   根据模型处理的任务不同,评价标准也不同,分类任务和回归任务的评价指标如下: 分类:accuracy、误分类率、...
    xingzai阅读 5,752评论 0 2
  • 引言 最近在做一些机器学习算法的工作,主要是应用,基本的机器学习算法都既可以做分类,又可以回归,然后对分类与回归算...
    STACK_ZHAO阅读 1,097评论 1 0