首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为KNN算法编写函数

为KNN算法编写函数
EN

Stack Overflow用户
提问于 2022-06-18 06:38:38
回答 1查看 73关注 0票数 1

我想编写一个函数,它使用数据数据和knn算法,使用下面的dist函数作为度量,以估计新客户的信用请求是否会被接受。

代码语言:javascript
复制
import pandas as pd
import math
import sklearn

data = pd.DataFrame({
            'Loan' : [52000, 100000, 97000, 62000],
            'DerogatoryMarks' : [0, 2, 0, 5],
            'Accepted' : [True, True, False, True]
        }, 
        columns = ['Loan', 'DerogatoryMarks', 'Accepted']
    )

# Dist function
def dist(data_loan, data_derogatory, test_loan, test_derogatory):
  return math.sqrt((data_loan - test_loan) ** 2 +
             100000000 * (data_derogatory - test_derogatory) ** 2)

# Testing the function
print(function(data, 85000, 1, 1))  # This should return False

我的尝试:

代码语言:javascript
复制
def function(data, loan, derogatory_marks, k):
    # Locate neighbors
    distances = list()
    for data_row in data:
        dist = dist(test_loan, data_loan)
        distance.append((data, dist))
    distances.sort(key=lambda tup: tup[1])
    neighbors = list()
    for i in range(num_neighbors):
        neighbors.append(distances[i][0])
        
    # Predictions
    output_values = [row[-1] for row in neighbors]
    prediction = max(set(output_values), key=output_values.count)
    return prediction

我做错什么了?

EN

回答 1

Stack Overflow用户

发布于 2022-06-18 09:26:08

欢迎来到这里!

您的代码有几个问题:

dist.

  • You函数定义了一个变量dist,当它需要4个参数时,只调用带有两个参数的函数dist

  • 还没有定义一些变量(test_loandata_loandistancenum_neighbors)。H 213F 214

看起来您正在尝试(1)在distances中存储从输入数据到行中的每个数据的距离,以及相关的结果作为元组存储,(2)按照每个元组中的第一个元素对distances进行排序,(3)只保留排序列表中的第一个k项。我们可以这样做:

代码语言:javascript
复制
distances = sorted(
    [
        (
            dist(
                loan,
                derogatory_marks,
                row.Loan,
                row.DerogatoryMarks,
            ),
            row.Accepted,
        )
        for row in data.itertuples()
    ],
    key=lambda t: t[0],
)[0:k]

(我使用data.itertuples作为命名元组遍历行,这允许我使用像row.Accepted这样的表达式方便地访问行数据。我们也可以以其他方式访问行数据。)

然后,您希望返回元组列表中最常见的布尔值。Python将True视为1,而False在幕后将其视为0,因此我们只需返回以下内容:

代码语言:javascript
复制
return sum(choice for _, choice in distances) / k >= 0.5
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72667221

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档