Python数据挖掘-回归分析

4 篇文章 0 订阅
8 篇文章 0 订阅
7 篇文章 0 订阅

1.3 Python代码实现：
import numpy as np

def fitSLR(x, y):
n = len(x)
dinominator = 0
numerator = 0
for i in range(0, n):
numerator += (x[i] - np.mean(x))*(y[i] - np.mean(y))
dinominator += (x[i] - np.mean(x))**2
b1 = numerator/float(dinominator)
b0 = np.mean(y)/float(np.mean(x))
return b0, b1

def predict(x, b0, b1):
return b0 + x*b1

x = [1, 3, 2, 1, 3]
y = [14, 24, 18, 17, 27]

b0, b1 = fitSLR(x, y)
print "intercept:", b0, " slope:", b1
x_test = 6
y_test = predict(6, b0, b1)
print "y_test:", y_test

Python代码：

from numpy import genfromtxt

import numpy as np

from sklearn import datasets, linear_model

dataPath = r"D:\MaiziEdu\DeepLearningBasics_MachineLearning\Datasets\Delivery.csv"

deliveryData = genfromtxt(dataPath, delimiter=',')

print "data"

print deliveryData

X = deliveryData[:, :-1]

Y = deliveryData[:, -1]

print "X:"

print X

print "Y: "

print Y

regr = linear_model.LinearRegression()

regr.fit(X, Y)

print "coefficients"

print regr.coef_

print "intercept: "

print regr.intercept_

xPred = [102, 6]

yPred = regr.predict(xPred)

print "predicted y: "

print yPred

三、Logistic回归：

3.1  Logistic回归原理

import matplotlib.pyplot as plt
import numpy as np

def Sigmoid(x):
return 1.0 / (1.0 + np.exp(-x))

x= np.arange(-10, 10, 0.1)
h = Sigmoid(x)            #Sigmoid函数
plt.plot(x, h)
plt.axvline(0.0, color='k')   #坐标轴上加一条竖直的线（0位置）
plt.axhspan(0.0, 1.0, facecolor='1.0', alpha=1.0, ls='dotted')
plt.axhline(y=0.5, ls='dotted', color='k')
plt.yticks([0.0, 0.5, 1.0])  #y轴标度
plt.ylim(-0.1, 1.1)       #y轴范围
plt.show()  

3.2LogisticRegression回归算法

LogisticRegression回归模型在Sklearn.linear_model子类下，调用sklearn逻辑回归算法步骤比较简单，即：
(1) 导入模型。调用逻辑回归LogisticRegression()函数。
(2) fit()训练。调用fit(x,y)的方法来训练模型，其中x为数据的属性，y为所属类型。
(3) predict()预测。利用训练得到的模型对数据集进行预测，返回预测结果。

1. from sklearn.linear_model import LogisticRegression  #导入逻辑回归模型
2. clf = LogisticRegression()
3. print clf
4. clf.fit(train_feature,label)
5. predict['label'] = clf.predict(predict_feature)

[python] view plain copy

1. LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,
2.           intercept_scaling=1, max_iter=100, multi_class='ovr', n_jobs=1,
3.           penalty='l2', random_state=None, solver='liblinear', tol=0.0001,
4.           verbose=0, warm_start=False)

3.3.  分析鸢尾花数据集

1. 鸢尾花数据集

iris里有两个属性iris.data，iris.target。data是一个矩阵，每一列代表了萼片或花瓣的长宽，一共4列，每一列代表某个被测量的鸢尾植物，一共采样了150条记录。

[python]

1. from sklearn.datasets import load_iris   #导入数据集iris
3. print iris.data

from sklearn.datasets import load_iris   #导入数据集iris
print iris.data

[python]

1. [[ 5.1  3.5  1.4  0.2]
2.  [ 4.9  3.   1.4  0.2]
3.  [ 4.7  3.2  1.3  0.2]
4.  [ 4.6  3.1  1.5  0.2]
5.  ....
6.  [ 6.7  3.   5.2  2.3]
7.  [ 6.3  2.5  5.   1.9]
8.  [ 6.5  3.   5.2  2. ]
9.  [ 6.2  3.4  5.4  2.3]
10.  [ 5.9  3.   5.1  1.8]]

[[ 5.1  3.5  1.4  0.2]
[ 4.9  3.   1.4  0.2]
[ 4.7  3.2  1.3  0.2]
[ 4.6  3.1  1.5  0.2]
....
[ 6.7  3.   5.2  2.3]
[ 6.3  2.5  5.   1.9]
[ 6.5  3.   5.2  2. ]
[ 6.2  3.4  5.4  2.3]
[ 5.9  3.   5.1  1.8]]

target是一个数组，存储了data中每条记录属于哪一类鸢尾植物，所以数组的长度是150，数组元素的值因为共有3类鸢尾植物，所以不同值只有3个。种类为山鸢尾、杂色鸢尾、维吉尼亚鸢尾。

print iris.target          #输出真实标签
print len(iris.target)      #150个样本 每个样本4个特征
print iris.data.shape

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
150
(150L, 4L)  

print iris.target          #输出真实标签
print len(iris.target)      #150个样本 每个样本4个特征
print iris.data.shape

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 2
2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2
2 2]
150
(150L, 4L)

2. 散点图绘制

1. import matplotlib.pyplot as plt
2. import numpy as np
3. from sklearn.datasets import load_iris    #导入数据集iris
4.
5. #载入数据集
7. print iris.data          #输出数据集
8. print iris.target         #输出真实标签
9. #获取花卉两列数据集
10. DD = iris.data
11. X = [x[0for x in DD]
12. print X
13. Y = [x[1for x in DD]
14. print Y
15.
16. #plt.scatter(X, Y, c=iris.target, marker='x')
17. plt.scatter(X[:50], Y[:50], color='red', marker='o', label='setosa'#前50个样本
18. plt.scatter(X[50:100], Y[50:100], color='blue', marker='x', label='versicolor'#中间50个
19. plt.scatter(X[100:], Y[100:],color='green', marker='+', label='Virginica'#后50个样本
20. plt.legend(loc=2#左上角
21. plt.show()
import matplotlib.pyplot as plt
import numpy as np

#载入数据集
print iris.data          #输出数据集
print iris.target         #输出真实标签
#获取花卉两列数据集
DD = iris.data
X = [x[0] for x in DD]
print X
Y = [x[1] for x in DD]
print Y

#plt.scatter(X, Y, c=iris.target, marker='x')
plt.scatter(X[:50], Y[:50], color='red', marker='o', label='setosa') #前50个样本
plt.scatter(X[50:100], Y[50:100], color='blue', marker='x', label='versicolor') #中间50个
plt.scatter(X[100:], Y[100:],color='green', marker='+', label='Virginica') #后50个样本
plt.legend(loc=2) #左上角
plt.show()

3. 逻辑回归分析

1. import matplotlib.pyplot as plt
2. import numpy as np
4. from sklearn.linear_model import LogisticRegression
5.
6. #载入数据集
8. X = X = iris.data[:, :2]   #获取花卉两列数据集
9. Y = iris.target
10.
11. #逻辑回归模型
12. lr = LogisticRegression(C=1e5)
13. lr.fit(X,Y)
14.
15. #meshgrid函数生成两个网格矩阵
16. h = .02
17. x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
18. y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
19. xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))
20.
21. #pcolormesh函数将xx,yy两个网格矩阵和对应的预测结果Z绘制在图片上
22. Z = lr.predict(np.c_[xx.ravel(), yy.ravel()])
23. Z = Z.reshape(xx.shape)
24. plt.figure(1, figsize=(8,6))
25. plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)
26.
27. #绘制散点图
28. plt.scatter(X[:50,0], X[:50,1], color='red',marker='o', label='setosa')
29. plt.scatter(X[50:100,0], X[50:100,1], color='blue', marker='x', label='versicolor')
30. plt.scatter(X[100:,0], X[100:,1], color='green', marker='s', label='Virginica')
31.
32. plt.xlabel('Sepal length')
33. plt.ylabel('Sepal width')
34. plt.xlim(xx.min(), xx.max())
35. plt.ylim(yy.min(), yy.max())
36. plt.xticks(())
37. plt.yticks(())
38. plt.legend(loc=2)
39. plt.show()

lr = LogisticRegression(C=1e5)
lr.fit(X,Y)

x_min, x_max = X[:, 0].min() - .5, X[:, 0].max() + .5
y_min, y_max = X[:, 1].min() - .5, X[:, 1].max() + .5
xx, yy = np.meshgrid(np.arange(x_min, x_max, h), np.arange(y_min, y_max, h))

1. [[ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
2.  [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
3.  ...,
4.  [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
5.  [ 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]]
6. [[ 1.5   1.5   1.5  ...,  1.5   1.5   1.5 ]
7.  [ 1.52  1.52  1.52 ...,  1.52  1.52  1.52]
8.  ...,
9.  [ 4.88  4.88  4.88 ...,  4.88  4.88  4.88]
10.  [ 4.9   4.9   4.9  ...,  4.9   4.9   4.9 ]]

Z = lr.predict(np.c_[xx.ravel(), yy.ravel()])

1. xx.ravel()
2. 3.8   3.82  3.84 ...,  8.36  8.38  8.4 ]
3. yy.ravel()
4. 1.5  1.5  1.5 ...,  4.9  4.9  4.9]
5. np.c_[xx.ravel(), yy.ravel()]
6. [[ 3.8   1.5 ]
7.  [ 3.82  1.5 ]
8.  [ 3.84  1.5 ]
9.  ...,
10.  [ 8.36  4.9 ]
11.  [ 8.38  4.9 ]
12.  [ 8.4   4.9 ]]

1. Z = logreg.predict(np.c_[xx.ravel(), yy.ravel()])
2. [1 1 1 ..., 2 2 2]
3. size: 39501

Z = Z.reshape(xx.shape)

1. [[1 1 1 ..., 2 2 2]
2.  [1 1 1 ..., 2 2 2]
3.  [0 1 1 ..., 2 2 2]
4.  ...,
5.  [0 0 0 ..., 2 2 2]
6.  [0 0 0 ..., 2 2 2]
7.  [0 0 0 ..., 2 2 2]]

plt.pcolormesh(xx, yy, Z, cmap=plt.cm.Paired)

plt.scatter(X[:50,0], X[:50,1], color='red',marker='o', label='setosa')

plt.scatter(X[:50,0], X[:50,1], color='red',marker='o', label='setosa')

Python实现逻辑回归(Logistic Regression in Python) ：

http://blog.csdn.net/zj360202/article/details/78688070

scikit-learn文档：http://scikit-learn.org/stable/modules/linear_model.html#logistic-regression

Logistic在线交互界面：http://www.vassarstats.net/logreg1.html

• 7
点赞
• 1
评论
• 82
收藏
• 一键三连
• 扫一扫，分享海报

04-12 2万+
03-05 5641
09-23 1694
04-16 4396
08-08 1万+
05-13 6万+
08-25 6414
11-26 735
07-21 361
05-05 1129
04-28 1万+

Bentley-2012

¥2 ¥4 ¥6 ¥10 ¥20

1.余额是钱包充值的虚拟货币，按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载，可以购买VIP、C币套餐、付费专栏及课程。