kNN做回歸任務

2021-10-21 04:09:08 字數 3799 閱讀 1070

knn常用作分類任務,但是也可以做回歸任務。

做法:使用knn計算某個資料點的**值時,模型會從訓練資料集中選擇離該資料點最近的k個資料點,並且把他們的y值取均值,把該均值作為新資料點的**值。

此次**演示使用資料庫中的鳶尾花資料集,通過前三個的特徵值,**第四個特徵值。

根據前三個特徵找出新資料的k個最近鄰,將這些鄰居的第四個特徵的平均值賦給該資料,就可以得到該資料對應第四個特徵的值。

分為兩個部分講解,資料處理部分相同

# 導包

from numpy import *

import numpy as np

import pandas as pd

from sklearn import datasets

import matplotlib as mpl

import matplotlib.pyplot as plt

# 防止畫圖出現中文亂碼

mpl.rcparams['font.family'] = 'simhei'

mpl.rcparams['axes.unicode_minus'] = false

# 載入資料

iris = datasets.load_iris()

data = pd.dataframe(iris.data)

data = data.sample(len(data),random_state=20)

#print(len(data)) # 150

train_x = np.asarray(data.iloc[:120,:-1])

train_y = np.asarray(data.iloc[:120,-1])

test_x = data.iloc[120:,:-1]

test_y = data.iloc[120:,-1]

#print(len(test_x))

plt.figure(figsize=(10,10))

plt.plot(test_y.values,'go--',label='真實值')

plt.title('knn連續值**')

plt.xlabel('節點序號')

plt.ylabel('花瓣寬度')

一、手寫knn回歸

# 手寫knn回歸**

def predict(test_x,train_x,train_y,k):

result =

datasetsize = train_x.shape[0]#檢視矩陣的維度

test_x = np.asarray(test_x)

for x in test_x:

'''diffmat = tile(x,(datasetsize,1)) - train_x

#tile(陣列,(在行上重複次數,在列上重複次數))

sqdiffmat = diffmat**2

sqdistances = sqdiffmat.sum(axis=1)

#sum預設axis=0,是普通的相加,axis=1是將乙個矩陣的每一行向量相加

distances = sqdistances**0.5

'''distances = np.sqrt(np.sum((x-train_x)**2,axis=1))

sorteddistindicies = distances.argsort()

index = sorteddistindicies[:k]

#sort函式按照陣列值從小到大排序

#argsort函式返回的是陣列值從小到大的索引值

return np.asarray(result)

# 進行**

result = predict(test_x,train_x,train_y,4)

print(result)

# 第四個屬性的真實值

plt.figure(figsize=(10,10))

plt.plot(result,'ro--',label='**值')

plt.plot(test_y.values,'go--',label='真實值')

plt.title('knn連續值**')

plt.xlabel('節點序號')

plt.ylabel('花瓣寬度')

二、呼叫sklearn庫函式

sklearn庫中實現knn回歸的模型有兩個:

kneighborsregressor(n_neighbors):根據每個查詢點的最近鄰的k個資料點的均值作為**值。

radiusneighborsregressor(radius):基於查詢點的固定半徑內的資料點的均值作為**值,radius一般指定浮點數。

from sklearn.neighbors import kneighborsregressor

kng = kneighborsregressor(n_neighbors=4)

kng.fit(train_x,train_y)

prediction = kng.predict(test_x)

plt.figure(figsize=(10,10))

plt.plot(result,'ro--',label='**值1')

plt.plot(prediction,'bo--',label='**值2')

plt.plot(test_y.values,'go--',label='真實值')

plt.title('knn連續值**')

plt.xlabel('節點序號')

plt.ylabel('花瓣寬度')

plt.plot(result,'ro--',label='**值1')

plt.plot(prediction,'bo--',label='**值2')

plt.plot(prediction1,'yo--',label='**值3')

plt.plot(test_y.values,'go--',label='真實值')

plt.title('knn連續值**')

plt.xlabel('節點序號')

plt.ylabel('花瓣寬度')

knn不僅可以用於分類演算法,還可以用於回歸,這節以後可以認真思考分類和回歸的區別。

參考 

EXCEL做回歸分析

昨天,石頭在食堂二樓,偶遇班上同學,她問我一問題,如何在spss中做回歸分析,石頭答曰 先做散點圖,再選回歸模型。由於數學基礎差,在spss中做出了散點圖,卻不識是何種模型,沒辦法,只好從excel中模擬,具體步驟如下 這裡是關鍵。一般在開始的時候我們並不知道哪一種是最符合的模型,不要緊,姑且點選乙...

如何用excel做回歸分析

在日常資料分析工作當中,回歸分析是應用十分廣泛的一種資料分析方法,按照涉及自變數的多少,可分為一元回歸分析和多元回歸分析 按照自變數和因變數之間的關係型別,可分為線性回歸分析和非線性回歸分析。回歸分析的實施步驟 1 根據 目標,確定自變數和因變數 2 建立回歸 模型 3 進行相關分析 4 檢驗回歸 ...

R語言 如何做回歸分析

在實際的資料處理過程中,我們經常需要做一些回歸分析,其中有線性回歸 邏輯回歸 多項式回歸等等,我們這裡主要是結合r語言進行簡單的線性回歸分析。首先,我們需要弄清楚因變數和自變數,一般自變數為x,因變數為y,也就是我們常常應用數學公式看到的。然後,是建立回歸模型,這裡我們主要採用一元線性回歸,在r語言...