#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Mon Nov 6 11:57:16 2017 @author: valerie """ import os import numpy as np import matplotlib.pyplot as plt # Régression linéaire, skin cancer skin_cancer = open('https://perso.univ-rennes1.fr/valerie.monbet/PYTHON/skin_cancer.dat', 'r') os.chdir('/users/valerie/Dropbox/ENSEIGNEMENT/PYTHON') skin_cancer = open('skin_cancer.dat', 'r') lignes = skin_cancer.readlines() skin_cancer.close() tab = [] for chn in lignes: tab.append(chn.split(' ,')) state = [] latitude = np.zeros(len(tab)-1) mortalite = np.zeros(len(tab)-1) for k in range(len(tab)-1): state.append(tab[k+1][0]) latitude[k] = float(tab[k+1][1]) mortalite[k] = float(tab[k+1][2]) x = latitude y = mortalite from sklearn import linear_model lr = linear_model.LinearRegression() lr.fit(np.reshape(x,[len(y),1]),np.reshape(y,[len(y),1])) lr.coef_ lr.intercept_ class RegLin: def __init__(self): self.intercept = 0 self.pente = 0 def fit(self,x,y): xc = x-np.mean(x) yc = y-np.mean(y) a = np.sum(xc*yc)/np.sum(xc**2) b = np.mean(y)-a*np.mean(x) self.intercept = b self.pente = a def getParams(self): print("Pente = ", self.pente) print("Intercept = ", self.intercept) return([self.intercept,self.pente]) def plotReg(self,x,y): plt.plot(x,y,"+") t = np.arange(np.min(x),np.max(x),0.1) plt.plot(t,self.intercept+self.pente*t,"r") plt.show() mod = RegLin() mod.fit(x,y) mod.getParams() mod.plotReg(x,y) plt.plot(x,y,'+') plt.plot(t,self.intercept+self.pente*t,"r") plt.show() t = np.arange(np.min(x),np.max(x),0.1) plt.plot(t,self.intercept+self.pente*t,"r") plt.show() from sklearn import linear_model lr = linear_model.LinearRegression() lr.fit(np.reshape(x,[len(y),1]),np.reshape(y,[len(y),1])) lr.coef_ lr.intercept_