2022年 11月 9日

python与数据挖掘 分类和预测

 

回归分析

线性回归(普遍解法最小二乘法)

步骤:

1、读取数据

2、画出散点图,求x和y 的相关系数:plt.scatter(x,y),x和y是dataframe

3、估计参数模型,建立回归模型:lrModel=LinearRegression()

4、训练模型: lm.fit(x,y)

5、对回归模型进行检验: lm.score(x,y)

6、利用回归模型进行预测:  lm.predict()

  1. # -*- coding:utf-8 -*-
  2. import numpy as np
  3. import matplotlib.pyplot as plt
  4. from sklearn.datasets import load_boston
  5. from sklearn.linear_model import LinearRegression
  6. boston = load_boston()
  7. print(boston.keys())
  8. # result:
  9. # ['data', 'feature_names', 'DESCR', 'target']
  10. print (boston.feature_names)
  11. # result:
  12. # ['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO' 'B' 'LSTAT']
  13. # print boston.DESCR # 取消注释并运行,可查看数据说明文档
  14. x = boston.data[:, np.newaxis, 5]
  15. y = boston.target
  16. lm = LinearRegression() # 声明并初始化一个线性回归模型的对象
  17. lm.fit(x, y) # 拟合模型,或称为训练模型
  18. print (u'方程的确定性系数(R^2): %.2f' % lm.score(x, y))
  19. # result: 方程的确定性系数(R^2): 0.48
  20. plt.scatter(x, y, color='green') # 显示数据点
  21. plt.plot(x, lm.predict(x), color='blue', linewidth=3) # 画出回归直线
  22. plt.xlabel('Average Number of Rooms per Dwelling (RM)')
  23. plt.ylabel('Housing Price')
  24. plt.title('2D Demo of Linear Regression')
  25. plt.show()

dict_keys([‘data’, ‘target’, ‘feature_names’, ‘DESCR’, ‘filename’])
[‘CRIM’ ‘ZN’ ‘INDUS’ ‘CHAS’ ‘NOX’ ‘RM’ ‘AGE’ ‘DIS’ ‘RAD’ ‘TAX’ ‘PTRATIO’
 ‘B’ ‘LSTAT’]
方程的确定性系数(R^2): 0.48

https://blog.csdn.net/xun527/article/details/79680473

有关线性回归分析很详细

 

logistic回归模型建模实例

逻辑回归(Logistic Regression是用于处理因变量为分类变量的回归问题,常见的是二分类或二项分布问题,也可以处理多分类问题,它实际上是属于一种分类方法。
二分类问题的概率与自变量之间的关系图形往往是一个S型曲线,采用的Sigmoid函数实现。

Logistic回归模型的建模步骤

 

1.首先根据分析的目的设置指标变量(因变量与自变量),然后我们进行数据的收集,根据收集到的数据,对特征再次进行筛选.(在具体筛选时,利用了随机逻辑回归中的get_support()函数)

2. 列出回归方程,估计出模型中的回归系数

.3. 进行模型的检测,模型有效性的检验指标有很多,最基本的有正确率,其次有混淆矩阵,ROC曲线,KS值等.

4,模型应用.
 

  1. # -*- coding:utf-8 -*-
  2. import pandas as pd
  3. from sklearn.linear_model import LogisticRegression, RandomizedLogisticRegression
  4. from sklearn.model_selection import train_test_split
  5. # 导入数据并观察
  6. data = pd.read_csv('../data/LogisticRegression.csv', encoding='utf-8')
  7. # print data.head(5) # 查看数据框的头五行
  8. # 将类别型变量进行独热编码one-hot encoding
  9. data_dum = pd.get_dummies(data, prefix='rank', columns=['rank'], drop_first=True)
  10. print (data_dum.tail(5) ) # 查看数据框的最后五行
  11. # result:
  12. # admit gre gpa rank_2 rank_3 rank_4
  13. # 395 0 620 4.00 1.0 0.0 0.0
  14. # 396 0 560 3.04 0.0 1.0 0.0
  15. # 397 0 460 2.63 1.0 0.0 0.0
  16. # 398 0 700 3.65 1.0 0.0 0.0
  17. # 399 0 600 3.89 0.0 1.0 0.0
  18. # 切分训练集和测试集
  19. X_train, X_test, y_train, y_test = train_test_split(data_dum.ix[:, 1:], data_dum.ix[:, 0], test_size=.1, random_state=520)
  20. lr = LogisticRegression() # 建立LR模型
  21. lr.fit(X_train, y_train) # 用处理好的数据训练模型
  22. print ('逻辑回归的准确率为:{0:.2f}%'.format(lr.score(X_test, y_test) *100))

train_test_split函数用于将矩阵随机划分为训练子集和测试子集,并返回划分好的训练集测试集样本和训练集测试集标签。

格式:

X_train,X_test, y_train, y_test =cross_validation.train_test_split(train_data,train_target,test_size=0.3, random_state=0)

 

参数解释

train_data:被划分的样本特征集

train_target:被划分的样本标签

test_size:如果是浮点数,在0-1之间,表示样本占比;如果是整数的话就是样本的数量

random_state:是随机数的种子。

随机数种子:其实就是该组随机数的编号,在需要重复试验的时候,保证得到一组一样的随机数。比如你每次都填1,其他参数一样的情况下你得到的随机数组是一样的。但填0或不填,每次都会不一样。

随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:

种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。