Asignación del curso de aprendizaje automático de Wu Enda (1) Análisis detallado basado en python

@ Regresión lineal univariante

Prefacio

El curso de aprendizaje automático del profesor Wu Enda de la Universidad de Stanford es casi un curso obligatorio para todos los estudiantes que aman el campo de la inteligencia artificial. Aunque hay muchos códigos basados ​​en Python en Internet, la mayoría de ellos usa el intérprete de modo interactivo de Python ipython para explicar. Utilizo pycharm para proporcionar el código fuente y la comprensión personal según mi propia comprensión. Algunos códigos pueden hacer referencia al código de otros. Si hay alguna infracción, envíeme un mensaje privado

1. Discusión de preguntas

El algoritmo de regresión lineal univariante necesita predecir el beneficio de abrir un snack bar en función de la población de la ciudad. Los
datos se pueden obtener de Coursera. La primera columna es la población de la ciudad y la segunda columna es el beneficio del snack bar en la ciudad.

Dos, análisis de código

1. Presentar la biblioteca

El código es el siguiente (ejemplo):

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

La biblioteca numpy, la biblioteca pandas y la biblioteca matplotlib implementan el álgebra lineal, el procesamiento de datos y las funciones de dibujo de Python, respectivamente. No podemos prescindir de estos tres módulos cada vez que implementamos algoritmos de inteligencia artificial.

2. Leer los datos

El código es el siguiente (ejemplo):

path ='D:\machine learning data\ex1data1.txt'
data = pd.read_csv(path, header=None, names=['Population', 'Profit'])

El encabezado del parámetro en read_csv especifica el número de filas que se utilizarán como nombres de columna y el número de filas en las que comienzan los datos. Si no hay un nombre de columna en el archivo, el valor predeterminado es 0; de lo contrario, se establece en Ninguno. Si establece explícitamente header = 0, se reemplazarán los nombres originales de las columnas existentes.

3. Procesamiento de datos

El código es el siguiente (ejemplo):

data.insert(0, 'Ones', 1)#在第0列插入一列,这列值全为1
clos=data.shape[1]  #shape[1]取列数,[0]取行数,clos=3
X=data.iloc[:,0:clos-1]#iloc,行全选,选01列,是前闭后开集合.X为DataFrame形式,既有行索引,也有列索引
y=data.iloc[:,clos-1:clos]#行全选,选最后一列
#print(X.head())  #验证X,y
#print(y.head())
X = np.matrix(X.values)#将X,y转化成矩阵
y = np.matrix(y.values)
theta=np.matrix([0,0]) #将theta转化成空矩阵j

Tenga en cuenta que se debe insertar una nueva columna en la columna 0. Esta es una columna de parámetros combinada con theta0. Si no existe tal columna, el modelo construido es solo una línea recta, plano, etc.que pasa por el origen; al mismo tiempo, la diferencia entre la matriz y la matriz para construir la matriz es: la matriz solo puede construir una matriz unidimensional , mientras que la matriz puede construir una matriz multidimensional, pero la matriz principal en numpy La ventaja es: notación relativamente simple para la multiplicación. Por ejemplo, a y b son dos matrices, entonces a * b es el producto de la matriz. En lugar de np.dot ()

4. Calcule la función de costo

El código es el siguiente (ejemplo):

def computeCost(X, y, theta):#计算代价函数
    inner=np.power(((X*theta.T)-y),2)
    return np.sum(inner)/(2 * len(X))#len(X)为行数,即公式中的m
print(computeCost(X, y, theta))

Aquí podemos dejar que la computadora calcule el costo inicial, el resultado es 32.072733877455676. Al mismo tiempo, debe tenerse en cuenta que theta.T representa la transposición de theta. Si theta no se transpone, no se obtendrá el resultado correcto.

5. El algoritmo de descenso de gradiente calcula la solución óptima

El código es el siguiente (ejemplo):

def gradientDescent(X, y, theta, alpha, iters):#alpha学习率,iters迭代次数
    temp = np.matrix(np.zeros(theta.shape))#一个与theta相同维度的0矩阵
    parameters=int(theta.ravel().shape[1]) #ravel()将多维降为一维
    cost = np.zeros(iters)#保存迭代之后的cost
    for i in range(iters):
        error=(X*theta.T)-y
        for j in range(parameters):
            term=np.multiply(error,X[:,j])
            temp[0,j]=theta[0,j] - np.sum(term)*(alpha/len(X))
        theta=temp
        cost[i]=computeCost(X, y, theta)
    return theta, cost
alpha = 0.01
iters= 1500
g,cost = gradientDescent(X, y, theta, alpha, iters)
print(g)
print(computeCost(X, y, g))#使用拟合值来计算代价函数(误差)

Aquí, alfa e iters representan la tasa de aprendizaje y el número de iteraciones, respectivamente. Cabe señalar que la función de multiplicar en la biblioteca np se usa para multiplicar las posiciones correspondientes de una matriz o matriz, no un cálculo de multiplicación de matrices en el sentido tradicional.

6. Dibujo

El código es el siguiente (ejemplo):

x = np.linspace(data.Population.min(), data.Population.max(), 100) #横坐标在最大和最小之间分100
f = g[0, 0] + (g[0, 1] * x)
fig, ax = plt.subplots(figsize=(12,8))
ax.plot(x, f, 'r', label='Prediction')
ax.scatter(data.Population, data.Profit, label='Traning Data')
ax.legend(loc=2)
ax.set_xlabel('Population')
ax.set_ylabel('Profit')
ax.set_title('Predicted Profit vs. Population Size')
plt.show()

Al final, podemos usar la biblioteca matplotlib.pyplot para operaciones de dibujo. En este punto, si puede comprender el código duplicado sin la ayuda de otros, significa que básicamente ha completado los requisitos de la tarea.

para resumir

Como solo soy un estudiante de segundo año en la universidad y estoy estudiando algoritmos de aprendizaje automático en mi dormitorio, no puedo actualizar un artículo con regularidad, pero haré todo lo posible para completar nuevos artículos lo antes posible en mi campo favorito.

Supongo que te gusta

Origin blog.csdn.net/cc512613/article/details/115309287
Recomendado
Clasificación