Nesse projeto eu finalmente utilizei uma IA treinada em Python, nesse caso eu adaptei e melhorei o código do projeto Regression-AI-Model, na qual apenas treina a IA e analisa sua taxa de acerto, porém ainda não é testado pelo usuário.
Sendo assim, nesse projeto atual é possível o usuário interagir com a IA.
- Entender a sintaxe do Python;
- Utilizar as bibliotecas: pandas e sklearn;
- Treinar IA, utilizando arquivos .csv;
- Criação e testes da IA.
Por final aprendi algumas coisas interessantes como:
Nesse caso, eu estava querendo criar alguns valores x e y simples, apenas para entender como a IA funciona.
Então no caso abaixo, eu defini manualmente 3 funções que ao passar o X, resolveria o Y e printaria X e Y.
// Esse é o arquivo que usei para copiar os valores para as tabelas de dados.
const f1 = (x) => console.log(`${x},${x*2+1}`)
console.log("Function 1")
console.log("x,y")
for(let x = 1; x <= 10; x++){
f1(x)
}
console.log("")
const f2 = (x) => console.log(`${x},${x*4+1}`)
console.log("Function 2")
console.log("x,y")
for(let x = 1; x <= 100; x++){
f2(x)
}
console.log("")
const f3 = (x) => console.log(`${x},${(x*3)+(x/2)}`)
console.log("Function 3")
console.log("x,y")
for(let x = 1; x <= 1000; x++){
f3(x)
}
Nas linhas baixo eu peço para meu usuário escolher qual das tabelas de dados ele vai escolher, ao fazer isso será atribuido a variável df.
print()
dataType = ""
df = ""
while dataType != "1" and dataType != "2" and dataType != "3":
dataType = input(f"Escolha uma opção: \n 1- Data1 \n 2- Data2 \n 3- Data3 \nR: ")
# Data 1;
if dataType == "1":
df = pd.read_csv('https://raw.githubusercontent.com/Victor-Lis/Regression-AI-Model-Practice/master/data.csv')
# Data 2;
if dataType == "2":
df = pd.read_csv('https://raw.githubusercontent.com/Victor-Lis/Regression-AI-Model-Practice/master/data2.csv')
# Data 3;
if dataType == "3":
df = pd.read_csv('https://raw.githubusercontent.com/Victor-Lis/Regression-AI-Model-Practice/master/data3.csv')
Nas tabelas "data", como são bem simples, tem apenas 2 colunas, X e Y. Sendo assim, fica bem auto-explicativo, y é igual a coluna y e x é igual ao restante das colunas, no caso só o x mesmo.
Caso queira entender melhor como funcionam X e Y, fiz um repositório apenas para explicar isso.
y = df["y"]
x = df.drop("y", axis=1)
Nas linhas abaixo utizo a função train_test_split() para separar 80% dos dados para treino e 20% para teste.
x_train, x_test, y_train, y_test = train_test_split(x, y, test_size=0.2, random_state=100)
Nesse trecho eu utizo a função LinearRegression() para criar um modelo de regressão linear, então uso a funcão lr.fit() para treinar a IA utilizando os dados separados no bloco anterior.
lr = LinearRegression()
lr.fit(x_train, y_train)
Fazendo previsões utilizando os dados de treino e teste, após isso salvando os resultados, para depois avaliar a acurácia da IA.
y_lr_train_pred = lr.predict(x_train)
y_lr_test_pred = lr.predict(x_test)
Nas linhas abaixo utilizo as funções mean_squared_error() e r2_score(), que expliquei melhor como funcionam no seguintes repositório AI-Data-Analysis
lr_train_mse = mean_squared_error(y_train, y_lr_train_pred)
lr_train_r2 = r2_score(y_train, y_lr_train_pred)
lr_test_mse = mean_squared_error(y_test, y_lr_test_pred)
lr_test_r2 = r2_score(y_test, y_lr_test_pred)
No restante desse bloco, utilizo a biblioteca "pandas" para trabalhar melhor a representação dos dados.
lr_results = pd.DataFrame(["Linear Regression", lr_train_mse, lr_train_r2, lr_test_mse, lr_test_r2]).transpose()
lr_results.columns = ['Method', 'Training MSE', 'Training R2', 'Test MSE', 'Test R2']
print()
print("Result Analysis")
print(lr_results)
def predict():
print()
### Getting number from user
num = ""
while num == "":
num = input("Escreva um número: ")
### Convert the input number to a list with a single element
new_data = pd.DataFrame([[float(num)]], columns=['x']) # Assign the feature name 'x'
### Make a prediction using the trained model
prediction = lr.predict(new_data)
### Print the prediction result
print("Valor:", prediction[0])
print()
### Restart
restart = input("Recomeçar? y/n - ")
if restart == "y":
predict()
predict()