美文网首页Python语言与信息数据获取和机器学习
Python3入门机器学习 - 线性回归与knn算法处理bost

Python3入门机器学习 - 线性回归与knn算法处理bost

作者: c6ad47dbfc82 | 来源:发表于2018-02-26 00:04 被阅读21次

简单线性回归


最小二乘法实现原理

使用最小二乘法计算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')

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

仅以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)

多元线性回归模型


# _*_ 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()"



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

相关文章

  • Python3入门机器学习 - 线性回归与knn算法处理bost

    简单线性回归 最小二乘法实现原理 测试 简单线性回归处理boston数据集 衡量指标 MSE RMSE MAE R...

  • 2019-10-29

    Day2 简单线性回归模型 机器学习入门--简单线性回归机器学习算法之线性回归算法 导入库matplotlib 绘...

  • 线性回归

    线性回归是机器学习算法的入门,通过该算法,管中窥豹,研究该算法的精髓之处。 线性回归 线性回归的损失函数为最小二乘...

  • 1 导学

    机器学习可解决的问题 图像识别人脸识别数字识别 MNIST数据集 机器学习算法 kNN线性回归多项式回归逻辑回归 ...

  • [他山之石] 3 常见机器学习方法总览

    这里总结了常见的几个机器学习算法:朴素贝叶斯、决策树、逻辑回归、线性回归、KNN、SVM、Boosting、聚类、...

  • 回归算法学习

    回归算法是机器学习中的经典算法之一,本文是对学习线性回归和逻辑回归算法进行的总结,线性回归与逻辑回归算法解决的分别...

  • kNN算法

    一. kNN算法 kNN(k-NearestNeighbor),即k最近邻算法,是机器学习算法中最基础的入门算法。...

  • 机器学习系列(六)——knn算法原理与scikit-learn底

    KNN算法 本篇将介绍knn算法,knn算法因为思想非常简单,运用的数学知识比较浅显,是非常适合机器学习入门的算法...

  • Python编写线性回归算法

    Python编写线性回归算法 前言 线性回归(Linear Regression)是机器学习的基础,作为机器学习算...

  • 《机器学习(周志华)》学习笔记(三)

    Q:机器学习中最简单的学习算法是什么? A:最简单的机器学习算法莫过于线性回归算法了。线性回归算法的基本形式如下:...

网友评论

    本文标题:Python3入门机器学习 - 线性回归与knn算法处理bost

    本文链接:https://www.haomeiwen.com/subject/jtcdxftx.html