Python3入门机器学习 - 线性回归与knn算法处理boston数据集

简介: 简单线性回归最小二乘法实现原理最小二乘法公式使用最小二乘法计算a、b的值,实现线性回归的拟合# _*_ encoding:utf-8 _*_import numpy as npclass SimpleLinearRegres...

简单线性回归


最小二乘法实现原理

img_d6fe213131327d8c1a69cfeedef93410.png
最小二乘法公式
使用最小二乘法计算a、b的值,实现线性回归的拟合
# _*_ encoding:utf-8 _*_
import numpy as np

class SimpleLinearRegression1:   //该类使用for循环方法计算a、b值,效率较低
    def __init__(self):
        self.a_ = None
        self.b_ = None

    def fit(self,X_train,y_train):
        X_mean = np.mean(X_train)
        y_mean = np.mean(y_train)
        num = 0.0
        d = 0.0
        for (x,y) in zip(X_train,y_train):
            num += (x-X_mean)*(y-y_mean)
            d += (x-X_mean)**2
        self.a_ = num/d
        self.b_ = y_mean - self.a_*X_mean

    def predict(self,X_test):
        return np.array([self._predict(x) for x in X_test ])

    def _predict(self,x):
        return self.a_*x+self.b_

    def __repr__(self):
        return "SimpleLinearRegression1()"



class SimpleLinearRegression2:          // 该类使用向量乘积方法计算a、b值,效率较高 
    def __init__(self):
        self.a_ = None
        self.b_ = None

    def fit(self, X_train, y_train):
        X_mean = np.mean(X_train)
        y_mean = np.mean(y_train)
        num = (X_train-X_mean).dot(y_train-y_mean)
        d = (X_train-X_mean).dot(X_train-X_mean)
        self.a_ = num / d
        self.b_ = y_mean - self.a_ * X_mean

    def predict(self, X_test):
        return np.array([self._predict(x) for x in X_test])

    def _predict(self, x):
        return self.a_ * x + self.b_

    def __repr__(self):
        return "SimpleLinearRegression2()"
测试
import numpy as np
from matplotlib import pyplot

x = np.random.random(size=100)
y = 3.0*x+4.0+np.random.normal(size=100)

%run MyScripts/SimpleLinearRegression.py
reg1 = SimpleLinearRegression1()
reg2 = SimpleLinearRegression2()

%timeit reg1.fit(x,y)
%timeit reg2.fit(x,y)

y1 = reg1.predict(x)
y2 = reg2.predict(x)

pyplot.scatter(x,y)
pyplot.plot(x,y1,color="r",alpha=0.5)
pyplot.plot(x,y2,color='g')
img_62bea4aae2e7afba732d881df8752d0a.png

简单线性回归处理boston数据集

img_fe6695070c28aa859f35705481896169.png
仅以boston数据集的第六个特征作为x轴
衡量指标
MSE
mse = np.sum((y_predict-y_test)**2)/len(y_test)
RMSE
rmse = sqrt(mse)
MAE
mae = np.sum(np.absolute(y_predict-y_test))/len(y_test)
R Square
1-mean_squared_error(y_test,y_predict)/np.var(y_test)


多元线性回归模型


https://www.cnblogs.com/pengyingzhi/p/5383801.html

# _*_ encoding:utf-8 _*_
import numpy as np
from sklearn.metrics import r2_score

class LinearRegression:
    def __init__(self):
        self.coef_ = None
        self.interception_ = None
        self._theta = None

    def fit_normal(self,X_train,y_train):
        X_b = np.hstack([np.ones((len(X_train),1)),X_train])
        self._theta = np.linalg.inv(X_b.T.dot(X_b)).dot(X_b.T).dot(y_train)
        self.interception_ = self._theta[0]
        self.coef_ = self._theta[1:]
        return self

    def predict(self,X_predict):
        X_b = np.hstack([np.ones((len(X_predict),1)),X_predict])
        return X_b.dot(self._theta)

    def score(self,X_test,y_test):
        return r2_score(y_test,self.predict(X_test))

    def __repr__(self):
        return "LinearRegression()"
img_2bf37925cec667e105ce047f8c178f66.png




KNN算法处理回归问题

knn_reg = KNeighborsRegressor()
params=[
    {
        'weights':['uniform'],
        'n_neighbors':[i for i in range(1,11)]
    },
    {
        'weights':['distance'],
        'n_neighbors':[i for i in range(1,11)],
        'p':[i for i in range(1,6)]
    }
]
grid_search = GridSearchCV(knn_reg,params,n_jobs=-1,verbose=1)
grid_search.fit(X_train,y_train)
  • grid_search.best_params_ {'n_neighbors': 5, 'p': 1, 'weights': 'distance'}
  • grid_search.best_score_ 0.634093080186858
  • grid_search.best_estimator_.score(X_test,y_test) 0.7044357727037996
目录
相关文章
|
22天前
|
存储 数据采集 人工智能
Python编程入门:从零基础到实战应用
本文是一篇面向初学者的Python编程教程,旨在帮助读者从零开始学习Python编程语言。文章首先介绍了Python的基本概念和特点,然后通过一个简单的例子展示了如何编写Python代码。接下来,文章详细介绍了Python的数据类型、变量、运算符、控制结构、函数等基本语法知识。最后,文章通过一个实战项目——制作一个简单的计算器程序,帮助读者巩固所学知识并提高编程技能。
|
23天前
|
IDE 程序员 开发工具
Python编程入门:打造你的第一个程序
迈出编程的第一步,就像在未知的海洋中航行。本文是你启航的指南针,带你了解Python这门语言的魅力所在,并手把手教你构建第一个属于自己的程序。从安装环境到编写代码,我们将一步步走过这段旅程。准备好了吗?让我们开始吧!
|
23天前
|
测试技术 开发者 Python
探索Python中的装饰器:从入门到实践
装饰器,在Python中是一块强大的语法糖,它允许我们在不修改原函数代码的情况下增加额外的功能。本文将通过简单易懂的语言和实例,带你一步步了解装饰器的基本概念、使用方法以及如何自定义装饰器。我们还将探讨装饰器在实战中的应用,让你能够在实际编程中灵活运用这一技术。
37 7
|
22天前
|
机器学习/深度学习 人工智能 算法
探索机器学习:从线性回归到深度学习
本文将带领读者从基础的线性回归模型开始,逐步深入到复杂的深度学习网络。我们将通过代码示例,展示如何实现这些算法,并解释其背后的数学原理。无论你是初学者还是有经验的开发者,这篇文章都将为你提供有价值的见解和知识。让我们一起踏上这段激动人心的旅程吧!
|
24天前
|
开发者 Python
Python中的装饰器:从入门到实践
本文将深入探讨Python的装饰器,这一强大工具允许开发者在不修改现有函数代码的情况下增加额外的功能。我们将通过实例学习如何创建和应用装饰器,并探索它们背后的原理和高级用法。
38 5
|
23天前
|
机器学习/深度学习 人工智能 算法
深度学习入门:用Python构建你的第一个神经网络
在人工智能的海洋中,深度学习是那艘能够带你远航的船。本文将作为你的航标,引导你搭建第一个神经网络模型,让你领略深度学习的魅力。通过简单直观的语言和实例,我们将一起探索隐藏在数据背后的模式,体验从零开始创造智能系统的快感。准备好了吗?让我们启航吧!
61 3
|
1月前
|
机器学习/深度学习 算法 数据挖掘
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构
K-means聚类算法是机器学习中常用的一种聚类方法,通过将数据集划分为K个簇来简化数据结构。本文介绍了K-means算法的基本原理,包括初始化、数据点分配与簇中心更新等步骤,以及如何在Python中实现该算法,最后讨论了其优缺点及应用场景。
103 4
|
10天前
|
算法
PAI下面的gbdt、xgboost、ps-smart 算法如何优化?
设置gbdt 、xgboost等算法的样本和特征的采样率
28 2
|
28天前
|
机器学习/深度学习 算法 数据挖掘
C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出
本文探讨了C语言在机器学习中的应用及其重要性。C语言以其高效性、灵活性和可移植性,适合开发高性能的机器学习算法,尤其在底层算法实现、嵌入式系统和高性能计算中表现突出。文章还介绍了C语言在知名机器学习库中的作用,以及与Python等语言结合使用的案例,展望了其未来发展的挑战与机遇。
44 1
|
1月前
|
机器学习/深度学习 自然语言处理 算法
深入理解机器学习算法:从线性回归到神经网络
深入理解机器学习算法:从线性回归到神经网络