By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
429,613 Members | 1,890 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 429,613 IT Pros & Developers. It's quick & easy.

tkinter, Entry does not get the variable values for the text box , or replace the new

P: 1
What I am trying to achieve is to firstly read the intvariable values defined globally and insert into a textbox when the program is ran, secondly I need to enable the user to change the values if they wish to.
the code is:
from numpy import *
import numpy as np
import matplotlib.pyplot as plt
import os
from matplotlib import style
from utils import DATA_DIR
from tkinter import *

# y = mx + b
# m is slope, b is y-intercept

##Creating the interface
root.wm_title("Linear Regression")


data = np.loadtxt(os.path.join(DATA_DIR, "data.csv"),delimiter=",")

x = data[:, 0]
y = data[:, 1]

# I have set these values global so they can be called into the text box

LRrtt = float(0.00001)
initb = int(35) # initial y-intercept guess
initm = int(0) # initial slope guess
iternum =int(50)

## interface labels etc
lbl1 = Label(root, text="Initial intercept").grid(row=0,sticky='E')
lbl2 = Label(root, text="Initial slope").grid(row=1,sticky='E')
lbl3 = Label(root, text="learning rate").grid(row=2,sticky='E')
lbl4 = Label(root, text="num_iteration").grid(row=3,sticky='E')
txtb = Entry(root,textvariable=initb).grid(row=0, column=1)
txtm= Entry(root,textvariable = initm).grid(row=1, column=1)
txtlr= Entry(root,textvariable= LRrtt).grid(row=2, column=1)
txtiter= Entry(root,textvariable=iternum).grid(row=3, column=1)

### Defining error function f(x)
def compute_error_for_line_given_points(b, m, points):
fx = 0
for i in range(0, len(points)):
x = points[i, 0]
y = points[i, 1]
fx += (y - (m * x + b)) ** 2 #TSSE
return fx / float(len(points))

### Initialising the search for the best line fit(starting with any two values for m&b)
###allows the gradient descent algorithm to tries to reduce the error function f(x)
###to find the best fit line

def step_gradient(b_current, m_current, points, learningRate):
b_intercept = 0
m_gradient = 0
N = float(len(points))
for i in range(0, len(points)):
x = points[i, 0]
y = points[i, 1]
b_intercept += -(2/N) * (y - ((m_current * x) + b_current))
m_gradient += -(2/N) * x * (y - ((m_current * x) + b_current))
new_b = b_current - (learningRate * b_intercept)
new_m = m_current - (learningRate * m_gradient)

return [new_b, new_m]

def gradient_descent_runner(points, starting_b, starting_m, learning_rate, num_iterations):
b = starting_b
m = starting_m
for i in range(num_iterations):
b, m = step_gradient(b, m, array(points), learning_rate)
# plt.set_title('Linear Regression',color='black')
#plt.set_xlabel('This is the X axis',color='white')
#plt.set_ylabel('This is the Y axis',color='white')
plt.scatter(x, y, label='Points', color='k', s=20, marker='*')
print("New values for b and m: ")
return [b, m]

def run():
points = data
learning_rate = LRrtt
initial_b = initb #initial y-intercept guess
initial_m = initm # initial slope guess
num_iterations = iternum
print ("Starting gradient descent at b = {0}, m = {1}, error = {2}".format(initial_b, initial_m, compute_error_for_line_given_points(initial_b, initial_m, points)))
print ("Running...")
[b, m] = gradient_descent_runner(points, initial_b, initial_m, learning_rate, num_iterations)
print("After {0} iterations b = {1}, m = {2}, error = {3}".format(num_iterations, b, m, compute_error_for_line_given_points(b, m, points)))

Button_sub = Button(root,text="Start Analysis", command=run).grid(row=4, column=0, sticky=W, pady=4)
Button_exit = Button(root, text='Quit',command=quit).grid(row=5, column=0, sticky=W, pady=4)

if __name__ == '__main__':

###/show plot
Jun 22 '16 #1
Share this question for a faster answer!
Share on Google+

Post your reply

Sign in to post your reply or Sign up for a free account.