python机器学习scikit-learn线性回归及决策树分类

一 安装scikit-learn 

依赖numpy,SciPy,mkl 

如果包来源不同,有的使用whl,有的使用pip官方安装,会造成执行程序的时候报错,找不到模块。

解决办法是,卸载所有的包,统一来源,重新安装。

插播一个神奇的网站:http://sklearn.apachecn.org/#/ 

二 广义线性回归模型

2.1  简单的实例-二元一次方程拟合

目前有3列数,已知x1,x2是自变量,y是因变量,假如其关系符合线性模型f(x)=ax1+bx2+......+c 

请用前22行数据拟合出y关于x1,x2的函数关系式,并预测23行的结果。

python机器学习scikit-learn线性回归及决策树分类_第1张图片

from sklearn import linear_model
import pandas as pd
import  numpy as np
model=linear_model.LinearRegression()
df=pd.read_csv('E:/scidemo1.csv')
a=df['x1'][:-1]
b=df['x2'][:-1]
c = df['y'][:-1]
ae=np.column_stack((a,b))   #np数组编辑功能果真强大
ts=model.fit(ae,c)
#输出结果
print(ts)
print(model.coef_)
print(model.intercept_)
ts2=model.predict([[23,22.73772315]])
print(ts2)

输出结果

LinearRegression(copy_X=True, fit_intercept=True, n_jobs=None, normalize=False)
[0.9 0.5]
0.9999999986599697
[33.06886158]

结果 y=0.9*x1+0.5*x2+0.99999999

第23行结果是33.06886158

也可以把样本数据拆分成训练集,测试集,并且通过测试集来计算MSE误差,和交叉验证。

参见: https://www.cnblogs.com/pinard/p/6016029.html

三 基本的分类问题

3.1 莺尾花分类问题

背景知识:

python机器学习scikit-learn线性回归及决策树分类_第2张图片

我们将决策数的思想引入到机器学习中,就产生了一种简单而又经典的预测方法:决策树学习(Decision Tree Learning),亦简称为决策树。决策树可以用来解决分类或回归问题,分别称之为分类树或回归树。其中,分类树的输出是一个标量,而回归树的一般输出为一个实数。通常情况下,决策树利用损失函数最小的原则建立模型,然后再利用该模型进行预测。决策树学习通常包含三个阶段:特征选择、树的生成,树的修剪。

     鸢尾花数据集是机器学习领域一个非常经典的分类数据集。接下来,我们就用这个训练集为基础,一步一步地训练一个机器学习模型。首先,我们来看一下该数据集的基本构成。数据集名称的准确名称为 Iris Data Set,总共包含 150 行数据。每一行数据由 4 个特征值及一个目标值组成。其中 4 个特征值分别为:萼片长度、萼片宽度、花瓣长度、花瓣宽度。而目标值及为三种不同类别的鸢尾花,分别为:Iris Setosa,Iris Versicolour,Iris Virginica。

python机器学习scikit-learn线性回归及决策树分类_第3张图片

导入数据,分割数据,训练,训练结果和真实数据比对。输出差异值

from sklearn import  datasets
from   sklearn.model_selection import    train_test_split
from   sklearn.tree import DecisionTreeClassifier
from   sklearn.metrics import accuracy_score

iris=datasets.load_iris()
iris_feature=iris.data #特征数据
iris_target=iris.target #结果数据
# print(iris_target)
feature_train,feature_test,target_train,target_test=train_test_split(iris_feature,iris_target,test_size=0.33,random_state=42)
#test_size分出来33%当做结果,random_state打乱原始数据,变成无序状态
dt_model=DecisionTreeClassifier() #新建一个默认的分类器
dt_model.fit(feature_train,target_train) #开始训练
predict_results=dt_model.predict(feature_test) #测试集开始预测
#predict_results是预测出来的,target_test是真实的分出来的。现在可以对比了
print('真实数据',target_test)
print('预测数据',predict_results)
print('--------如果结果比较多的时候,使用sklearn自带的结果评估方法 accuracy_score---------')
print(accuracy_score(predict_results,target_test))

3.2 使用决策树分类进行用户画像判断用户收入水平

介绍:用户收入水平划分为,低中高。给定记录作为准确的数据源。

四个主要品类的客单价作为训练模型的样本,其中prediction是用户画像组做的用户收入预测,因为拿不到真是数据,我们假定这个预测是100%准确的。

数据集:

python机器学习scikit-learn线性回归及决策树分类_第4张图片

其中prediction的0,1,2分别代表低,中,高收入人群。

实际上,这个prediction的准确度会影响到分类器的准确度。

 

import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score

df = pd.read_table('D:/c/rewq.csv', delimiter=',')
df2=df[['zhusu','waimai','yule','tuangou']]
df3=df['prediction']
ts_feature=np.array(df2)
ts_target=np.array(df3)
feature_train, feature_test, target_train, target_test = train_test_split(ts_feature, ts_target, test_size=0.33,
                                                                          random_state=42)
dt_model = DecisionTreeClassifier()
dt_model.fit(feature_train, target_train)
predict_results = dt_model.predict(feature_test)
print('真实数据', target_test)
print('预测数据', predict_results)
print('--------使用sklearn自带的结果评估方法 accuracy_score评估预测准确率---------')
print(accuracy_score(predict_results, target_test))

输出的模型拟合数据和样本数据的符合度是50%

但是我们假定一个用户在外卖,住宿,娱乐,团购的客单价都是999,输出结果是2,高收入。说明还是有点靠谱的。

resdemo1=dt_model.predict([[999,999,999,999]])
print('------------单例------------------')
print(resdemo1)

输出结果:2 高收入

提高准确度的建议:

如果能拿到置信度高的样本,比如真实的收入数据,这个分类器的准确度可能会更高。

如果一个用户住宿,娱乐,团购的客单价都是0,外卖客单价是999元。我们认为这是高收入人群。

为了避免这个常识造成的算法缺陷。建议修改训练集数据,保证每个品类的订单都足够

数据样本的选择会直接影响到结果准确性。如何选择有实际意义,没有业务逻辑缺陷的样本很重要。

你可能感兴趣的:(python)