Revisión básica del aprendizaje automático

Pasantía de reclutamiento de primavera de 2021 bytes, publicidad de datos, algoritmo de recomendación, experiencia de pasantía

Empuje la fórmula, haga ruedas en el sitio

k significa

#coding=utf-8
def distance(pt1,pt2):
    m=len(pt1)
    ans=0
    for i in range(m):
        ans+=(pt1[i]-pt2[i])**2
    return ans
        
# 构造样本
pts=[]
for i in range(10):
    for j in range(10):
        pts.append([i,j])

# 初始中心
centers=[[0,2],[3,3]]
k=len(centers)
m=2
# 迭代
print(centers)
for i in range(5):
    # 给每个样本分配对应的标签
    labels=[]
    for pt in pts:
        best_i=-1
        best_dis=100000
        for i, center in enumerate(centers):
            dis=distance(pt,center)
            if dis<best_dis:
                best_i=i
                best_dis=dis
        labels.append(best_i)
    # 重新计算中心点
    cts=[[] for _ in range(k)]
    centers=[[0]*m for _ in range(k)]
    for pt,label in zip(pts, labels):
        cts[label].append(pt)
    for label in range(k):
        n_samples=len(cts[label])
        for dim in range(m):
            sm=0
            for sample in range(n_samples):
                sm+=cts[label][sample][dim]
            sm/=n_samples
            centers[label][dim]=sm
    print(centers)
print(labels)
    

Regresión logística

Principalmente respaldar estos códigos

  • Entropía cruzada
loss = -(y @ np.log(y_hat) + (1 - y) @ np.log(1 - y_hat)) / n
  • y_hat cálculo

Solo sigmoide

return 1 / (1 + np.exp(-X @ self.w))
  • Cálculo de gradiente
dw = (y - y_hat) @ X
dw /= n
class LR:
    def __init__(self, lr=0.1, max_iter=1000, eps=1e-5):
        self.eps = eps
        self.max_iter = max_iter
        self.lr = lr

    def predict_proba(self, X):
        return 1 / (1 + np.exp(-X @ self.w))

    def fit(self, X: np.ndarray, y: np.ndarray):
        n, m = X.shape
        X = np.hstack([X, np.ones([n, 1])])
        m += 1
        self.w = np.zeros([m])
        pre_loss = 0
        for i in range(self.max_iter):
            y_hat = self.predict_proba(X)
            # 交叉熵
            loss = -(y @ np.log(y_hat) + (1 - y) @ np.log(1 - y_hat)) / n
            if abs(loss - pre_loss) < self.eps:
                print('误差不再减少')
                break
            pre_loss = loss
            print(loss)
            # 计算梯度
            dw = (y - y_hat) @ X
            dw /= n
            # 梯度下降
            self.w += dw * self.lr
            print(self.w)

Regresión lineal

Código triturado

挖井的问题(每个家庭都可以打井,成本为c[i],或者挖水管,i,j两家通水管成本为dp[i][j]。求所有家庭喝上水的最小成本)

Muestras de salida que cumplen los cuatro requisitos de la base de datos (los requisitos específicos se olvidan y el hash está involucrado)

Cien millones de datos de nivel son la temperatura de varios lugares de la Tierra. La matriz está ordenada y la complejidad del tiempo es O (n). El entrevistador fue muy amable, dio muchos consejos y finalmente lo escribió ... me da vergüenza

Conceptos básicos de informática

Problema de copia profunda y copia superficial de Python

Expresión regular

Tabla de picadillo

A qué estructura de la tabla hash en Python corresponde y cómo resolver los conflictos de hash

Solución al conflicto de hash

Métrico

AUC

Dadas al azar dos muestras, una positiva y otra negativa, la probabilidad de que la muestra positiva se clasifique antes que la muestra negativa (equivalente y Wilcoxon-Mann-Witney Test), por lo que cuanto mayor sea el AUC, más probable es que la muestra positiva se clasifique antes que la muestra negativa, que es decir, cuanto mayor sea el resultado de clasificación Great.

Entonces, AUC refleja la capacidad del clasificador para ordenar muestras.

Método de dibujo / cálculo

Método 1

El enfoque es que, dado que se conoce la probabilidad de cada muestra, se ordena de pequeña a grande y se utiliza como probabilidad de corte a su vez. Una predicción menor que esta probabilidad es un ejemplo negativo, y una predicción mayor que esta probabilidad es positiva. Por ejemplo, para que cada muestra tenga un Valor de predicción, puede calcular las tasas de verdaderos y falsos positivos en la muestra, dibujar puntos en el sistema de coordenadas y luego cambiar la probabilidad de corte a su vez, calcular las tasas de verdaderos y falsos positivos de diferentes grupos , el área entre la curva dibujada y el eje horizontal es el AUC

Método 2

Suponga que hay un total de (m + n) muestras, de las cuales m son muestras positivas, n son muestras negativas y hay un total de m n pares de muestras, recuento y la probabilidad de que una muestra positiva se predice como positiva. muestra es mayor que la probabilidad de una muestra negativa que se predice como muestra positiva El valor se registra como 1, el recuento se acumula y luego se divide por (m n) es el valor de AUC

import numpy as np
from sklearn.metrics import roc_auc_score

def auc(labels, probs):
    n_samples = len(labels)
    pos_cnt = sum(labels)
    neg_cnt = n_samples - pos_cnt
    
    total_comb = pos_cnt * neg_cnt #组合数
    
    pos_index = np.where(labels==1)[0] #找出正例的索引
    neg_index = np.where(labels==0)[0] # 找出负例的索引
    
    cnt = 0
    for pos_i in pos_index:
        for neg_j in neg_index:
            if probs[pos_i] > probs[neg_j]:
                cnt += 1
            elif probs[pos_i] == probs[neg_j]:
                cnt += 0.5
            else:
                cnt += 0
    auc = cnt / total_comb
    return auc

labels = np.array([1,1,0,0,1,1,0])
probs= np.array([0.8,0.7,0.5,0.5,0.5,0.5,0.3])
print('ours:', auc(labels,probs))
print('sklearn:', roc_auc_score(labels,probs))

Método 3

Establezca el intervalo de escala del eje horizontal en 1 / N y el intervalo de escala del eje vertical en 1 / P ; luego, clasifique las muestras de acuerdo con la salida de probabilidad prevista por el modelo (de mayor a menor);

Atraviese las muestras a su vez y dibuje la curva ROC desde el punto cero. Cada vez que se encuentra una muestra positiva, se dibuja una curva con un intervalo de escala a lo largo del eje vertical y una curva con un intervalo de escala a lo largo del eje horizontal cada vez que se encuentra una muestra negativa, hasta el recorrido. Después de terminar todas las muestras, la curva finalmente se detiene en el punto (1,1) y se dibuja toda la curva ROC.

¿Por qué ROC es más robusto a las muestras desequilibradas que PR?

Sabemos que cuando dibujamos curvas ROC y PR, dibujamos líneas de puntos con (FPR, TPR) y (Precision, Recall) respectivamente.

Porque en el caso del mismo TPR, su diferencia FPR es relativamente pequeña. Pero su diferencia de curva PR es relativamente grande, porque bajo la misma situación de TPR, su diferencia de Precisión es bastante grande.

¿Cuándo elegir PR y cuándo elegir ROC?

Esencialmente, la diferencia en la primera pregunta es que ROC y PR se enfocan en puntos diferentes. ROC se enfoca en muestras positivas y negativas al mismo tiempo, mientras que PR solo se enfoca en muestras positivas. Esto no es difícil de entender, porque TPR es una medida de muestras positivas y FPR es una medida de muestras negativas. Sin embargo, tanto Precision como Recall son muestras de medición positivas.

Por ejemplo, para predecir el cáncer, preferiríamos las relaciones públicas, porque esperamos predecir la mayor cantidad posible de pacientes con cáncer y, al mismo tiempo, ser lo más precisos posible y no perder a ningún paciente con cáncer. En cuanto a FPR, en realidad no es tan importante, porque siempre se puede verificar por otros medios más.

Pero para los modelos de clasificación de imágenes de perros y gatos, preferiríamos ROC, porque nuestro objetivo es identificar con precisión tanto a los gatos como a los perros, y ROC presta atención a ambos aspectos al mismo tiempo.

Modelo lineal

Qué hacer cuando L1 no está guiado

Cuando la función de pérdida no es diferenciable y el descenso del gradiente ya no es efectivo, se puede utilizar el método de descenso del eje de coordenadas. El descenso del gradiente es actualizar los parámetros a lo largo de la dirección del gradiente negativo del punto actual, y el método de descenso del eje de coordenadas es a lo largo de la dirección del eje de coordenadas. Para el número de entidades, cuando el método de descenso del eje de coordenadas ingresa a la actualización de parámetros, el valor de m-1 se fija primero, y luego se busca la solución local óptima del otro, de modo que Evite el problema de la función de pérdida indirecta.
Utilice el algoritmo proximal para resolver L1, este método es para optimizar el resultado del límite superior de la función de pérdida # Estadísticas de probabilidad

Estadísticas de probabilidad

Pregunta de probabilidad: A y B se turnan para comer dulces. La probabilidad de comer en cada ronda es 1/2. El que come primero gana, la probabilidad de que A gane. Hay dos caramelos, la expectativa de la cantidad de caramelos.

2 3 \ frac {2} {3} 32

No esperes

La incidencia de una determinada enfermedad es 1/1000. El paciente tiene un 95% de probabilidad de ser diagnosticado con la enfermedad, y una persona sana tiene un 5% de probabilidad de ser mal diagnosticada. Si se detecta que una persona está enferma, ¿cuál es el probabilidad real de la enfermedad.

Fórmula bayesiana

Varias conversiones de rand elegantes

470. Implementar Rand10 () con Rand7 ()

class Solution {
    
    
public:
    int rand10() {
    
    
        int row,col,idx;
        do{
    
    
            row=rand7();
            col=rand7();
            idx=col+(row-1)*7;
        }while(idx>40);
        return 1+(idx-1)%10;
    }
};

Inserte la descripción de la imagen aquí

  • rand5 implementa rand7
class Solution {
    
    
public:
    int rand7() {
    
    
        int row,col,idx;
        do{
    
    
            row=rand5();
            col=rand5();
            idx=col+(row-1)*5;
        }while(idx>21);
        return 1+(idx-1)%7;
    }
};

suponer:

2 ⋅ 1 1 - 4 25 2 \ cdot \ frac {1} {1- \ frac {4} {25}} 21-2 541

  • rand11 implementa rand7

Esto es extraño, entiendo que es equivalente a solo una línea

La diferencia entre la estimación de máxima verosimilitud y la máxima probabilidad posterior

La estimación de máxima verosimilitud proporciona un método para evaluar los parámetros del modelo dados los datos de observación, y el muestreo en la estimación de máxima verosimilitud satisface el supuesto de que todas las muestras son independientes y están distribuidas de manera idéntica.

La probabilidad posterior máxima es una estimación puntual que es difícil de observar con base en datos empíricos. La mayor diferencia con la estimación de máxima verosimilitud es que la probabilidad posterior máxima se integra en la distribución previa de la cantidad a estimar, por lo que la probabilidad posterior máxima puede considerarse como una regla Estimación de máxima verosimilitud

¿Cuál es la distribución previa conjugada?

Suponiendo que es el parámetro en la distribución general, la función de densidad previa lo es, y la función de densidad posterior calculada mediante la información de muestreo tiene la misma forma funcional, se denomina conjugada previa.

¿Cómo cambia un aleatorizador con una distribución uniforme de 0 ~ 1 a un aleatorizador con un valor medio de 0 y una varianza de 1?

La distribución uniforme produce una distribución normal

La distribución uniforme del algoritmo probabilístico produce una distribución normal

Método de función inversa

Generalmente, una distribución de probabilidad, si su función de distribución es y = F (x) y = F (x)y=F ( x ) , entonces, el rango de y es 0 ~ 1, encuentre la función inversaGGG , y luego genera un número aleatorio entre 0 y 1 como entrada, luego la salida es un número aleatorio que se ajusta a la distribución:

y = G ( x ) y= G(x) y=G ( x )

Teorema del límite central

import numpy as np
import pylab as plt

n = 12
N = 5000
x = np.zeros([N])
for j in range(N):
    a = np.random.rand(n)
    u = sum(a)
    x[j] = u - n * 0.5
plt.hist(x)
plt.show()

Caja Muller

import numpy as np
import pylab as plt

N = 1000
x1 = np.random.rand(1, N)
x2 = np.random.rand(1, N)
y1 = np.sqrt(-2 * np.log(x1)) * np.cos(2 * np.pi * x2)
y2 = np.sqrt(-2 * np.log(x1)) * np.sin(2 * np.pi * x2)
y = np.hstack([y1, y2])
plt.hist(y)
plt.show()	

37% ley

En un evento, n niñas sosteniendo rosas de diferentes longitudes en sus manos, dispuestas en una fila desordenada, un niño caminaba de principio a fin, tratando de obtener una rosa más larga, una vez que tomó una, no pudo tomar la otra Sí, si te lo pierdes, no puedes mirar atrás, pregunta la mejor estrategia?

Supongo que te gusta

Origin blog.csdn.net/TQCAI666/article/details/114994979
Recomendado
Clasificación