<jupyter_start><jupyter_text>Regressão Linear Multivariada - Trabalho Estudo de caso: Qualidade de VinhosNesta trabalho, treinaremos um modelo de regressão linear usando descendência de gradiente estocástico no conjunto de dados da Qualidade do Vinho. O exemplo pressupõe que uma cópia CSV do conjunto de dados está no diretório de trabalho atual com o nome do arquivo *winequality-white.csv*.O conjunto de dados de qualidade do vinho envolve a previsão da qualidade dos vinhos brancos em uma escala, com medidas químicas de cada vinho. É um problema de classificação multiclasse, mas também pode ser enquadrado como um problema de regressão. O número de observações para cada classe não é equilibrado. Existem 4.898 observações com 11 variáveis de entrada e 1 variável de saída. Os nomes das variáveis são os seguintes:1. Fixed acidity.2. Volatile acidity.3. Citric acid.4. Residual sugar.5. Chlorides.6. Free sulfur dioxide. 7. Total sulfur dioxide. 8. Density.9. pH.10. Sulphates.11. Alcohol.12. Quality (score between 0 and 10).O desempenho de referencia de predição do valor médio é um RMSE de aproximadamente 0.148 pontos de qualidade.Utilize o exemplo apresentado no tutorial e altere-o de forma a carregar os dados e analisar a acurácia de sua solução.<jupyter_code>import pandas as pd
import numpy as np
dataset = pd.read_csv('winequality-white.csv', delimiter=';')
dataset
import math
def mean(numbers):
    return sum(numbers)/float(len(numbers))
import random
def splitDataset(dataset, splitRatio):
    header = np.asarray(list(dataset))
    trainSize = int(len(dataset) * splitRatio)
    trainSet = []
    test = list(dataset)
    while len(trainSet) < trainSize:
        index = random.randrange(len(test))
        trainSet.append(test.pop(index))
    trainSet = pd.DataFrame(trainSet, columns = ['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar','chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density','pH','sulphates' ,'alcohol', 'quality'])
    test = pd.DataFrame(test, columns = ['fixed acidity', 'volatile acidity', 'citric acid', 'residual sugar','chlorides', 'free sulfur dioxide', 'total sulfur dioxide', 'density','pH','sulphates' ,'alcohol', 'quality'])
    return [trainSet, test]
def predict(row, coefficients):
    yhat = coefficients[0]
    for i in range(len(row)-1):
        yhat += coefficients[i + 1] * row[i]
    return yhat
splitRatio = 0.7
newDS = dataset.values.tolist()
train, test = splitDataset(newDS, splitRatio)
coef = [0.0 for i in range(len(train.columns))]
for row in range(len(train)):
    yhat = predict(train.iloc[row], coef)
    erro = abs(train.iloc[row][-1] - yhat)
    print("Esperado=%.3f, Predito=%.3f, Erro=%.3f" % (train.iloc[row][-1], yhat, erro))


def coefficients_sgd(train, l_rate, n_epoch, coef):
    print ('Coeficiente Inicial={0}' % (coef))
    for epoch in range(n_epoch):
        sum_error = 0
        for row in train:
            yhat = predict(row, coef)
            error = yhat - row[-1]
            sum_error += error**2
            coef[0] = coef[0] - l_rate * error
            for i in range(len(row)-1):
                coef[i + 1] = coef[i + 1] - l_rate * error * row[i] 
        print(('epoch=%d, lrate=%.3f, error=%.3f' % (epoch, l_rate, sum_error)))
    return coef
l_rate = 0.01
n_epoch = 20
coef = [0.0 for i in range(len(train.columns))]
newDS = (train - train.min())/(train.max()-train.min())
newTest = (test - test.min())/(test.max()-test.min())
coefs = coefficients_sgd(newDS.values, l_rate, n_epoch, coef)
coefs
erro = []
for line in test.values:
    yhat = predict(line, coef)
    erro.append(pow((yhat - line[-1]), 2))  
pow(mean(erro),0.5)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.12374763065258597, 'fraction_numerical': 0.017059301380991064, 'mean_word_length': 3.931909212283044, 'pattern_counts': {'":': 0, '<': 6, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '206044', 'license': 'MIT', 'n_tokens_mistral': 1326, 'n_tokens_neox': 1258, 'n_words': 395, 'path': '2019/05-linear-regression/Multivariate_Regression_Trabalho.ipynb', 'repo_name': 'dqrtec/datasience', 'size': '3693'}