def find_eigenvector(A, tolerance=0.00001):
    guess = [1 for __ in A]

    while True:
        result = matrix_operate(A, guess)
        length = magnitude(result)
        next_guess = scalar_multiply(1 / length, result)

        if distance(guess, next_guess) < tolerance:
            return next_guess, length  # собственный вектор, собственное число

        guess = next_guess
def knn_classify(k, labeled_points, new_point):
    """каждая маркированная точка должна быть представлена
    парой (точка, метка)"""

    # упорядочить маркированные точки от ближайшей до самой удаленной
    by_distance = sorted(labeled_points,
                         key=lambda point_label: distance(point_label[0], new_point))

    # найти метки для k ближайших
    k_nearest_labels = [label for _, label in by_distance[:k]]

    # и дать им проголосовать
    return majority_vote(k_nearest_labels)
def cluster_distance(cluster1, cluster2, distance_agg=min):
    """найти агрегированное расстояние между элементами 
    кластера cluster1 и элементами кластера cluster2"""
    return distance_agg([distance(input1, input2)
                        for input1 in get_values(cluster1)
                        for input2 in get_values(cluster2)])
Beispiel #4
0
                               y, theta_0, alpha_0)


if __name__ == "__main__":

    print("using the gradient")

    v = [random.randint(-10, 10) for i in range(3)]

    tolerance = 0.0000001

    while True:
        #print v, sum_of_squares(v)
        gradient = sum_of_squares_gradient(v)  # compute the gradient at v
        next_v = step(v, gradient, -0.01)  # take a negative gradient step
        if distance(next_v, v) < tolerance:  # stop if we're converging
            break
        v = next_v  # continue if we're not

    print("minimum v", v)
    print("minimum value", sum_of_squares(v))
    print()

    print("using minimize_batch")

    v = [random.randint(-10, 10) for i in range(3)]

    v = minimize_batch(sum_of_squares, sum_of_squares_gradient, v)

    print("minimum v", v)
    print("minimum value", sum_of_squares(v))
                               y, theta_0, alpha_0)


if __name__ == "__main__":

    print("применение градиента")

    v = [random.randint(-10, 10) for i in range(3)]

    tolerance = 0.0000001

    while True:
        #print v, sum_of_squares(v)
        gradient = sum_of_squares_gradient(v)  # вычислить градиент в точке v
        next_v = step(v, gradient, -0.01)  # сделать шаг антиградиента
        if distance(next_v, v) < tolerance:  # остановиться, если сходимся
            break
        v = next_v  # продолжить, если нет

    print("минимум v", v)
    print("минимальное значение", sum_of_squares(v))
    print()

    print("применение пакетной минимизации minimize_batch")

    v = [random.randint(-10, 10) for i in range(3)]

    v = minimize_batch(sum_of_squares, sum_of_squares_gradient, v)

    print("минимум v", v)
    print("минимальное значение", sum_of_squares(v))
def random_distances(dim, num_pairs):
    return [distance(random_point(dim), random_point(dim))
            for _ in range(num_pairs)]