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語言...