sklearn_demo / Perceptron.py
raaraya's picture
Upload 15 files
42d0bac
import streamlit as st
import pandas as pd
import numpy as np
from sklearn import datasets
from sklearn.model_selection import train_test_split
from sklearn.linear_model import Perceptron as P_sk
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
class perceptron_st:
def __init__(self, database, test_size=0.2):
self.database = database
self.test_size = test_size
self.desc = r'''
# **Perceptron**
Este es el modelo m谩s sencillo y que sirve de introducci贸n a los modelos de redes neuronales. En particular, su funcionamiento es bastante similar al modelo de regresi贸n linear. con la diferencia de que ocupa una funci贸n de activaci贸n en la salida (**funci贸n no lineal**).
**Modelo Lineal**
$$
f(w, b) = w^{t}x + b
$$
**Funci贸n de Activaci贸n**
$$
z(x) \in (0, 1) \quad si \quad x \geq 0
$$
**Aproximaci贸n (predicci贸n)**
$$
\hat{y} = z(w^{t}x + b)
$$
**Reglas de actualizaci贸n (aqu铆 se encuentra incluido el bias)**
$$
w = w + \Delta w = w + lr(y_{i} - \hat{y_{i}})x_{i}
$$
'''
def solve(self):
self.X, self.y = self.database.data, self.database.target
X_train, X_test, y_train, y_test = train_test_split(self.X, self.y, test_size=self.test_size, random_state=1234)
self.sklearn_regr = P_sk(random_state=1234)
self.sklearn_regr.fit(X_train, y_train)
y_pred = self.sklearn_regr.predict(X_test)
acc = mean_squared_error(y_pred, y_test)
st.metric('MSE (Mean Square Error)', value=f'{np.round(acc, 2)}')
def visualization(self):
n_features = int(self.database.data.shape[1])
self.x_feature = st.slider('Variable en eje x', 1, n_features, 1)
self.X = self.database.data[:, self.x_feature-1:self.x_feature]
self.y = self.database.target
X_train, X_test, y_train, y_test = train_test_split(self.X, self.y, test_size=self.test_size, random_state=1234)
self.sklearn_regr = P_sk(random_state=1234)
self.sklearn_regr.fit(X_train, y_train)
x1_min = self.X.min()
x1_max = self.X.max()
x_pred = np.linspace(x1_min, x1_max, 100).reshape([100, 1])
y_pred = self.sklearn_regr.predict(x_pred)
plt.figure(1, figsize=(12, 8))
plt.scatter(self.X, self.y, edgecolors='k', cmap=plt.cm.Paired)
plt.plot(x_pred, y_pred)
return plt.gcf()