#! /usr/bin/env python3 # def basketball_lstsq ( ): #*****************************************************************************80 # ## basketball_lstsq uses a least squares solver to model basketball data. # # Discussion: # # Least squares solver for optimal (b,m) to fit (x,y) data # y = b + m*x # # Licensing: # # This code is distributed under the GNU LGPL license. # # Modified: # # 09 October 2019 # # Author: # # John Burkardt # import numpy as np from ford_data import ford_data print ( '' ) print ( 'basketball_lstsq:' ) print ( ' Given age x and sponsorship y for basketball players,' ) print ( ' seek (m,b) so that y=b+mx approximates the data.' ) print ( ' Use least squares solver to estimate best b and m.' ) # # Get the (normalized) Ford data. # data = np.loadtxt ( 'basketball_data.txt' ) sponsor = data[:,3] age = data[:,4] n = len ( sponsor ) # # Create the matrix A: # A = np.zeros ( [ n, 2 ] ) A[:,0] = 1; A[:,1] = age; # # Call least squares solver for rectangular linear system. # Four output quantities are returned, but we are only # interested in the first one, so we put underscores to # ignore the last three. # bm, _, _, _ = np.linalg.lstsq ( A, sponsor, rcond = None ) print ( '' ) print ( ' Estimating model parameters:' ) print ( ' x = age' ) print ( ' y = sponsorship' ) print ( ' Seek relationship y = b + m * x' ) print ( ' b = %g' % ( bm[0] ) ) print ( ' m = %g' % ( bm[1] ) ) e = np.sum ( ( sponsor - bm[0] - bm[1] * age )**2 ) print ( ' Sum-of-squares error is %g' % ( e ) ) # # Terminate. # print ( '' ) print ( 'basketball_lstsq:' ) print ( ' Normal end of execution.' ) return if ( __name__ == '__main__' ): basketball_lstsq ( )