1. 程式人生 > 其它 >藍橋雲課 樓賽 第22期 K 近鄰迴歸演算法實現 參考答案(沒通過???)

藍橋雲課 樓賽 第22期 K 近鄰迴歸演算法實現 參考答案(沒通過???)

技術標籤:機器學習藍橋雲課

import numpy as np

# 已知樣本特徵
train_data = np.array([[1, 1], [2, 2], [3, 3], [4, 4], [5, 5],
                       [6, 6], [7, 7], [8, 8], [9, 9], [10, 10]])
# 已知樣本目標值
train_labels = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])

def knn(train_data, train_labels, test_data, k):
    """
    引數:
    train_data -- 已知樣本特徵,numpy.ndarray.2d
    train_labels -- 已知樣本目標,numpy.ndarray.1d
    test_data -- 單個未知樣本特徵,numpy.ndarray.2d
    k -- k 值

    返回:
    test_labels -- 單個未知樣本預測目標,浮點型
    """

    ### 補充程式碼 ###
    inX=test_data
    dataSet=train_data
    labels=train_labels
    import operator
    from decimal import Decimal, ROUND_HALF_UP
    dataSetSize = dataSet.shape[0]
    diffMat = np.tile(inX, (dataSetSize, 1)) - dataSet  # 分類輸入向量與訓練集樣本作差
    sqDiffMat = diffMat ** 2  # 計算分類輸入與樣本訓練集差平方值
    sqDistances = sqDiffMat.sum(axis=1)  # 歐式距離平方
    distances = sqDistances ** 0.5  # 歐式距離
    sortedDistIndicies = distances.argsort()  # argsort示例 a= np.array([1,3,2,4]),b=a.argsort() >>>array([0, 2, 1, 3], dtype=int32)
    classCount = {}  # 定義空字典
    for i in range(k):
        voteIlabel = labels[sortedDistIndicies[i]]
        classCount[voteIlabel] = classCount.get(voteIlabel, 0) + 1
    sortedClassCount = sorted(classCount.items(), key=operator.itemgetter(1), reverse=True)
    test_labels=sortedClassCount[0][0]
    print(test_labels)
    #四捨五入
    test_labels = Decimal(float(test_labels)).quantize(Decimal("0.01"), rounding="ROUND_HALF_UP")
    return test_labels

if __name__=="__main__":
    test_data = np.array([[1.2, 1.3]])
    knn(train_data, train_labels, test_data, k=3)