機械学習 - 線形回帰
この記事のコードは、「本物の機械学習」からです
分類アルゴリズムは、まずここで停止し、回帰アルゴリズムを言うようになりました
直線回帰
モデルはBaiduの上でそれについて思い出すことができない場合は線形回帰は、コードに直接式についてはここに記載されている、と言っていないか、比較的簡単です
'''
Created on Jan 8, 2011
@author: Peter
'''
from numpy import *
#加载数据
def loadDataSet(fileName): #general function to parse tab -delimited floats
#attribute的个数
numFeat = len(open(fileName).readline().split('\t')) - 1 #get number of fields
dataMat = []; labelMat = []
fr = open(fileName)
for line in fr.readlines():
lineArr =[]
curLine = line.strip().split('\t')
for i in range(numFeat):
lineArr.append(float(curLine[i]))
#dataMat是一个二维矩阵,labelMat是一维的
dataMat.append(lineArr)
labelMat.append(float(curLine[-1]))
return dataMat,labelMat
#就是,简单的线性回归
def standRegres(xArr,yArr):
#这里没有出现为特征X加1列,因为它已经写在数据中了2333,要是数据中没有的话是要写的。
xMat = mat(xArr); yMat = mat(yArr).T
xTx = xMat.T*xMat#这个是X的转置乘以X
if linalg.det(xTx) == 0.0:
print("This matrix is singular, cannot do inverse")
return
#.I在numpy中是求逆矩阵
ws = xTx.I * (xMat.T*yMat)
return ws
一つの問題は、それが最小限で必要とされていないため、モデルunderfittingが最良の予測を得るためには不可能であろうかのように、線形回帰は、不偏推定値の平均二乗誤差を、underfitting現象が発生する可能性があることである。だから、いくつかの方法が可能に推定は、それにより、予測の平均二乗誤差を減少させる、いくつかの偏差として引用しました。一つの方法は、局所的に加重線形回帰であります
---もちろん、の源である「機械学習本当の。」
ローカル重み付き線形回帰
このページの本より乾燥品、直接印象づけます
、人々はあなたに愚かな甘い白は同じではないという印象をカーネル関数を使用して、線形回帰している表示されませんでした!私は、なぜバーSVMの後ろにそれを置く本を知っています
そして、ローカルに加重線形回帰は、その背後にある物語ですか?以下のように要約、インターネットに、より信頼性の高いブログを参照してください。
出典:のhttp://cynhard.com/2018/07/13/ML-Locally-Weighted-Linear-Regression/
(式を表示するには、プラグインを使用しているためブロガーのため、私は怠け者2333ショット)
これは、いわゆる「重量」は直接線形方程式に適用されるが、損失関数の「ずれ」に使用される関数に適用されていない、見ることができます。
キーストローク:重量重量大きく、予測サンプル既知の試料により近い、より大きなK、重量がよりゆっくり距離と共に減少します。
ローカルで加重回帰は、ノンパラメトリックな学習アルゴリズムは、そのような選択特性より良いの考えに基づいています。これらの遠いポイント、またはほぼ点の寄与を無視して、その中点付近正確にフィット波長一般線形回帰の関数に基づくものと、それぞれに一定の重みで予測点近傍の点を与えます大きな重みは、重みがはるかに大きい高速秋、kは、距離と重量減少の速度を制御するパラメータの波長であり、小さな値を指します。より小さく、より正確なフィット小さな問題も発生する可能性があります。
アルゴリズムの主な欠点は、アルゴリズムのコストが非常に高くなるように、線形回帰モデルが出てくる、シミュレート再される全体のデータセットに基づいて、各予測点のために必要とされます。----------------
免責事項:この記事はCSDNブロガーのオリジナルの記事、「突然の美しい」BY-SAの著作権契約、複製、オリジナルのソースとのリンクを添付してくださいCC 4.0に従っていますこの文。
オリジナルリンクします。https://blog.csdn.net/tianse12/article/details/70161591
ローカル加重線形回帰は、「学習」と同じ性質とKNNに属する必要としない、いなくても、この線形回帰の性質として、
コードは以下の通りであります:
'''
Created on Jan 8, 2011
@author: Peter
'''
from numpy import *
#局部加权线性回归,需要手动选择一个合适的k
#输入的是一个向量而不是矩阵,它一次只能处理一个预测!有点捞
def lwlr(testPoint,xArr,yArr,k=1.0):
#x和y是训练集样本
xMat = mat(xArr); yMat = mat(yArr).T
#m是样本个数
m = shape(xMat)[0]
#创建一个对角单位矩阵用来保存权重w
#使用矩阵而不是向量的原因是为了最后用矩阵乘法好算,公式里面也是这样写的
weights = mat(eye((m)))
for j in range(m): #next 2 lines create weights matrix
#一个样本计算一遍,填到weight中
diffMat = testPoint - xMat[j,:] #
weights[j,j] = exp(diffMat*diffMat.T/(-2.0*k**2))
xTx = xMat.T * (weights * xMat)
if linalg.det(xTx) == 0.0:
print ("This matrix is singular, cannot do inverse")
return
ws = xTx.I * (xMat.T * (weights * yMat))
return testPoint * ws
#对多个待回归点进行回归
def lwlrTest(testArr,xArr,yArr,k=1.0): #loops over all the data points and applies lwlr to each one
m = shape(testArr)[0]
yHat = zeros(m)
for i in range(m):
yHat[i] = lwlr(testArr[i],xArr,yArr,k)
return yHat
#输出x和y坐标,比lwlrTest更方便将结果画出来
def lwlrTestPlot(xArr,yArr,k=1.0): #same thing as lwlrTest except it sorts X first
yHat = zeros(shape(yArr)) #easier for plotting
xCopy = mat(xArr)
xCopy.sort(0)#按第一个特征排个序
for i in range(shape(xArr)[0]):
yHat[i] = lwlr(xCopy[i],xArr,yArr,k)
return yHat,xCopy