我实现了二进制Logistic回归分类器。为了玩,我用tanh代替了S型函数(1/1 + exp(-z))。结果完全相同,分类阈值相同,为0.5,即使tanh在{-1,1}范围内,而Sigmoid在{0,1}范围内。
使用S形函数真的重要吗,还是像tanh这样的可微分非线性函数都能工作吗?
谢谢。
我已成功实现了一个使用RBF内核的内核感知器分类器.我知道内核技巧将特征映射到更高的维度,因此可以构造线性超平面来分离点.例如,如果您有要素(x1,x2)并将其映射到三维特征空间,您可能会得到:K(x1,x2) = (x1^2, sqrt(x1)*x2, x2^2).
如果将其插入感知器决策函数w'x+b = 0,最终得到:w1'x1^2 + w2'sqrt(x1)*x2 + w3'x2^2这将为您提供循环决策边界.
虽然内核技巧本身非常直观,但我无法理解其中的线性代数方面.有人可以帮助我理解我们如何能够映射所有这些附加功能而无需使用内部产品明确指定它们吗?
谢谢!
我在python中实现了梯度下降的线性回归.为了了解它的表现如何,我将它与scikit-learn的LinearRegression()类进行了比较.出于某种原因,sklearn总是比MSE平均表现优于我的程序(我使用Boston Housing数据集进行测试).我知道我目前没有进行梯度检查以检查收敛,但我允许进行多次迭代并将学习率设置得足够低,以便它应该收敛.我的学习算法实现中有没有明显的错误?这是我的代码:
import numpy as np
from sklearn.linear_model import LinearRegression
def getWeights(x):
lenWeights = len(x[1,:]);
weights = np.random.rand(lenWeights)
bias = np.random.random();
return weights,bias
def train(x,y,weights,bias,maxIter):
converged = False;
iterations = 1;
m = len(x);
alpha = 0.001;
while not converged:
for i in range(len(x)):
# Dot product of weights and training sample
hypothesis = np.dot(x[i,:], weights) + bias;
# Calculate gradient
error = hypothesis - y[i];
grad = (alpha * 1/m) * ( error * x[i,:] );
# Update weights …Run Code Online (Sandbox Code Playgroud)