2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 局部加权线性回归 线性回归高级版

局部加权线性回归 线性回归高级版

时间:2021-01-04 10:50:33

相关推荐

局部加权线性回归 线性回归高级版

/mooba/p/5947161.html

本来不想乱改别人的,但是他的不对,跑不出来有错误

我自己做了个数据

height weight

1.5 50

1.5 60

1.5 70

1.6 98

1.9 89

2.0 120

2.5 54

0.2 5

1 20

__author__ = 'abel'import matplotlib.pyplot as plt import numpy as np import scipy as sp from scipy.stats import norm #正态分布 他妈的还以为是度量..from sklearn.pipeline import Pipeline from sklearn.linear_model import LinearRegression from sklearn.preprocessing import PolynomialFeatures from sklearn import linear_model # -*- coding: utf-8 -*-"""author: Alandate:/4/3局部加权线性回归,参考《机器学习实战》"""from numpy import *def loadDataSet():fileName = '新建文本文.txt'print ((open(fileName).readline().split('\t')))print (len(open(fileName).readline().split('\t')))numFeat = len(open(fileName).readline().split('\t'))-1#因为最后一个是\n所以特征的数量要-1print (numFeat)dataMat = []; labelMat = []fr = open(fileName)fr.readline()for line in fr.readlines():lineArr = []curLine = line.strip().split('\t')for i in range(numFeat-1):lineArr.append(float(curLine[i]))dataMat.append(lineArr)labelMat.append(float(curLine[-1]))return dataMat, labelMatdef lwlr(testPoint, xArr, yArr, k = 1.0):'''the algorithm of lwlr其实整个算法的本质就在于这个cross function的书写.而他之所以效果好就是因为他有一个testPoint这个点的使用,导致他是一个非参数学习.每一次都需要给定这个你要预测的点X,来让算法重新生成关于这个预测值的有关联最大的训练集来生成最适合这个预测点的算法的 参数.继续说就是用于预测点足够进的值来进行加权LR.这个加权比值用k来控制.'''xMat = mat(xArr); yMat = mat(yArr).Tm = shape(xMat)[0]#样本个数weights = mat(eye(m))#单位矩阵,用于存储权重for j in range(m):diffMat = testPoint - xMat[j]weights[j, j] = exp(diffMat * diffMat.T/(-2.0*k**2))#用高斯核求权重xTx = xMat.T * (weights * xMat) #括号里面是把样本乘以对应的权重 ws = linalg.pinv(xTx) * (xMat.T * (weights * yMat))return testPoint * wsdef lwlrTest(testArr, xArr, yArr,k):num = shape(testArr)[0]print (num)yHat = zeros(num)#存储预测的labelfor i in range(num):yHat[i] = lwlr(testArr[i], xArr, yArr, k)print (yHat)print (666666)return yHat#绘制估计的点和原始点的对比图 #k控制训练点距离查询点的衰减速率,越小,衰减越快def rmse(y_test, y): return sp.sqrt(sp.mean((y_test - y) ** 2)) def plotData(k):xArr, yArr = loadDataSet()print (xArr)print (yArr)#用lwlr对整个数据集进行估计yHat = lwlrTest(xArr, xArr, yArr, k )print (rmse(yHat,yArr))degree=[4]for d in degree: clf = Pipeline([('poly', PolynomialFeatures(degree=d)),\('linear', LinearRegression(fit_intercept=True))]) #这个fit_intercept一般选True效果更好 clf.fit(xArr,yArr)y=clf.predict(xArr)print (rmse(y,yArr)) #用plotData(0.1)#直接这一句就够了,利用函数自动调用其他函数 1是加权系数#经过上面测试4次函数都没有这个高斯加权回归效果好,真心叼,缺陷就是比较慢

话说感觉可以改成2次的么,2次带高斯的回归..

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。