回归分析
线性回归(普遍解法最小二乘法)
步骤:
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()
- # -*- coding:utf-8 -*-
- import numpy as np
- import matplotlib.pyplot as plt
- from sklearn.datasets import load_boston
- from sklearn.linear_model import LinearRegression
-
- boston = load_boston()
- print(boston.keys())
- # result:
- # ['data', 'feature_names', 'DESCR', 'target']
-
- print (boston.feature_names)
- # result:
- # ['CRIM' 'ZN' 'INDUS' 'CHAS' 'NOX' 'RM' 'AGE' 'DIS' 'RAD' 'TAX' 'PTRATIO' 'B' 'LSTAT']
-
- # print boston.DESCR # 取消注释并运行,可查看数据说明文档
- x = boston.data[:, np.newaxis, 5]
- y = boston.target
- lm = LinearRegression() # 声明并初始化一个线性回归模型的对象
- lm.fit(x, y) # 拟合模型,或称为训练模型
- print (u'方程的确定性系数(R^2): %.2f' % lm.score(x, y))
- # result: 方程的确定性系数(R^2): 0.48
-
- plt.scatter(x, y, color='green') # 显示数据点
- plt.plot(x, lm.predict(x), color='blue', linewidth=3) # 画出回归直线
- plt.xlabel('Average Number of Rooms per Dwelling (RM)')
- plt.ylabel('Housing Price')
- plt.title('2D Demo of Linear Regression')
- 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,模型应用.
- # -*- coding:utf-8 -*-
- import pandas as pd
- from sklearn.linear_model import LogisticRegression, RandomizedLogisticRegression
- from sklearn.model_selection import train_test_split
-
- # 导入数据并观察
- data = pd.read_csv('../data/LogisticRegression.csv', encoding='utf-8')
- # print data.head(5) # 查看数据框的头五行
-
- # 将类别型变量进行独热编码one-hot encoding
- data_dum = pd.get_dummies(data, prefix='rank', columns=['rank'], drop_first=True)
- print (data_dum.tail(5) ) # 查看数据框的最后五行
- # result:
- # admit gre gpa rank_2 rank_3 rank_4
- # 395 0 620 4.00 1.0 0.0 0.0
- # 396 0 560 3.04 0.0 1.0 0.0
- # 397 0 460 2.63 1.0 0.0 0.0
- # 398 0 700 3.65 1.0 0.0 0.0
- # 399 0 600 3.89 0.0 1.0 0.0
-
- # 切分训练集和测试集
- 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)
-
- lr = LogisticRegression() # 建立LR模型
- lr.fit(X_train, y_train) # 用处理好的数据训练模型
- 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或不填,每次都会不一样。
随机数的产生取决于种子,随机数和种子之间的关系遵从以下两个规则:
种子不同,产生不同的随机数;种子相同,即使实例不同也产生相同的随机数。