Soy nuevo en la ML. Actualmente estoy leyendo el libro clásico Aprendizaje automático en acción por Peter Harrington. En su implementación de la regresión de cresta en el listado P165 8.3, el libro estandariza la matriz de características $X$ restando los medios de los atributos y dividiéndolos por varianzas de los atributos no por desviaciones estándar de los atributos ¡! Como sigue:
def ridgeRegres(xMat,yMat,lam=0.2):
xTx = xMat.T*xMat
denom = xTx + eye(shape(xMat)[1])*lam
if linalg.det(denom) == 0.0:
print "This matrix is singular, cannot do inverse"
return
ws = denom.I * (xMat.T*yMat)
return ws
def ridgeTest(xArr,yArr):
xMat = mat(xArr); yMat=mat(yArr).T
yMean = mean(yMat,0)
yMat = yMat - yMean #to eliminate X0 take mean off of Y
#regularize X's
xMeans = mean(xMat,0) #calc mean then subtract it off
xVar = var(xMat,0) #calc variance of Xi then divide by it
xMat = (xMat - xMeans)/xVar
numTestPts = 30
wMat = zeros((numTestPts,shape(xMat)[1]))
for i in range(numTestPts):
ws = ridgeRegres(xMat,yMat,exp(i-10))
wMat[i,:]=ws.T
return wMat
Luego llama a ridgeTest por
>>> abX,abY=regression.loadDataSet('abalone.txt')
>>> ridgeWeights=regression.ridgeTest(abX,abY)
No creo que esto tenga ningún sentido. Según normalización Para crear una varianza unitaria, debemos dividir $X-\mu$ por desviación estándar $\sigma$ Porque..: $$ D(\frac{X-\mu}{\sigma})=\frac{1}{\sigma^2}D(X)=\frac{1}{\sigma^2}\sigma^2=1, $$ donde $D(X)=\sigma^2$ es la varianza de $X$ .
Si según el libro, dividir $X-\mu$ por varianza $\sigma^2$ Sólo conseguimos..: $$ D(\frac{X-\mu}{\sigma^2})=\frac{1}{\sigma^4}D(X)=\frac{1}{\sigma^4}\sigma^2=\frac{1}{\sigma^2}, $$ que no es una varianza unitaria.
La razón por la que no estoy tan seguro de que se trate de un error es que, en primer lugar, el libro maneja $Y$ cuidadosamente restando su media y no incluir una columna todo 1 en $X$ aprobado, ambos me parecen adecuados (véase La normalización L2 no castiga la intercepción ). Por lo tanto, no creo que el libro cometa un error tan evidente como éste. En segundo lugar, ni la fe de erratas (véase errata ) o en el foro del libro ya se ha hablado de él. No es un libro nuevo.
Aunque he publicado dividir por std no por varianza en el foro del libro, aún no se ha recibido respuesta. Así que recurro al intercambio de pilas. ¿La estandarización de las características del libro divide erróneamente $X-\mu$ por la varianza o es una acción significativa?
Muchas gracias de antemano. Cualquier pista me ayudará.
0 votos
Hay diferentes maneras de escalar sus datos . La que describes (restar la media, dividir por el std dev) es posiblemente la más común, llamada z-scaling. Si se divide por la varianza, como señalas, no se consigue una varianza unitaria en todas las características, por lo que se acaban teniendo datos escalados centrados en la media en los que cada característica tiene una varianza diferente.