同步操作将从 编程语言算法集/Python 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
"""Implementation of gradient descent algorithm for minimizing cost of a linear hypothesisfunction."""import numpy as np# List of input, output pairstrain_data = (((5, 2, 3), 15),((6, 5, 9), 25),((11, 12, 13), 41),((1, 1, 1), 8),((11, 12, 13), 41),)test_data = (((515, 22, 13), 555), ((61, 35, 49), 150))parameter_vector = [2, 4, 1, 5]m = len(train_data)LEARNING_RATE = 0.009def _error(example_no, data_set="train"):""":param data_set: train data or test data:param example_no: example number whose error has to be checked:return: error in example pointed by example number."""return calculate_hypothesis_value(example_no, data_set) - output(example_no, data_set)def _hypothesis_value(data_input_tuple):"""Calculates hypothesis function value for a given input:param data_input_tuple: Input tuple of a particular example:return: Value of hypothesis function at that point.Note that there is an 'biased input' whose value is fixed as 1.It is not explicitly mentioned in input data.. But, ML hypothesis functions use it.So, we have to take care of it separately. Line 36 takes care of it."""hyp_val = 0for i in range(len(parameter_vector) - 1):hyp_val += data_input_tuple[i] * parameter_vector[i + 1]hyp_val += parameter_vector[0]return hyp_valdef output(example_no, data_set):""":param data_set: test data or train data:param example_no: example whose output is to be fetched:return: output for that example"""if data_set == "train":return train_data[example_no][1]elif data_set == "test":return test_data[example_no][1]return Nonedef calculate_hypothesis_value(example_no, data_set):"""Calculates hypothesis value for a given example:param data_set: test data or train_data:param example_no: example whose hypothesis value is to be calculated:return: hypothesis value for that example"""if data_set == "train":return _hypothesis_value(train_data[example_no][0])elif data_set == "test":return _hypothesis_value(test_data[example_no][0])return Nonedef summation_of_cost_derivative(index, end=m):"""Calculates the sum of cost function derivative:param index: index wrt derivative is being calculated:param end: value where summation ends, default is m, number of examples:return: Returns the summation of cost derivativeNote: If index is -1, this means we are calculating summation wrt to biasedparameter."""summation_value = 0for i in range(end):if index == -1:summation_value += _error(i)else:summation_value += _error(i) * train_data[i][0][index]return summation_valuedef get_cost_derivative(index):""":param index: index of the parameter vector wrt to derivative is to be calculated:return: derivative wrt to that indexNote: If index is -1, this means we are calculating summation wrt to biasedparameter."""cost_derivative_value = summation_of_cost_derivative(index, m) / mreturn cost_derivative_valuedef run_gradient_descent():global parameter_vector# Tune these values to set a tolerance value for predicted outputabsolute_error_limit = 0.000002relative_error_limit = 0j = 0while True:j += 1temp_parameter_vector = [0, 0, 0, 0]for i in range(len(parameter_vector)):cost_derivative = get_cost_derivative(i - 1)temp_parameter_vector[i] = (parameter_vector[i] - LEARNING_RATE * cost_derivative)if np.allclose(parameter_vector,temp_parameter_vector,atol=absolute_error_limit,rtol=relative_error_limit,):breakparameter_vector = temp_parameter_vectorprint(("Number of iterations:", j))def test_gradient_descent():for i in range(len(test_data)):print(("Actual output value:", output(i, "test")))print(("Hypothesis output:", calculate_hypothesis_value(i, "test")))if __name__ == "__main__":run_gradient_descent()print("\nTesting gradient descent for a linear hypothesis function.\n")test_gradient_descent()
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。