#encoding:utf-8
import pandas as pd
import numpy as np
from sklearn import datasets,linear_model
from sklearn.metrics import roc_curve,auc
import pylab as pl
from matplotlib.pyplot import plot
def confusionmatrix(predicted,actual,threshold):
if len(predicted)!=len(actual):return -1
tp = 0.0
fp = 0.0
tn = 0.0
fn = 0.0
for i in range(len(actual)):
if actual[i]>0.5:
if predicted[i]>threshold:
tp += 1.0
else:
fn += 1.0
else:
if predicted[i]
tn += 1.0
else:
fp += 1.0
rtn = [fp,fn,fp,tn]
return rtn
#獲取資料
rockdata = open('sonar.all-data')
xlist =
labels =
#將標籤轉換成數值,m轉換成1.0,r轉換為0.0
for line in rockdata:
row = line.strip().split(",")
if(row[-1] =='m'):
else:
row.pop()
floatrow = [float(num) for num in row]
print labels
#獲取資料的行數,通過對3的求餘,將資料劃分為2個子集,1/3的測試集,2/3的訓練集
indices = range(len(xlist))
xlisttest = [xlist[i] for i in indices if i%3==0]
xlisttrain = [xlist[i] for i in indices if i%3!=0]
labelstest = [labels[i] for i in indices if i%3==0]
labelstrain = [labels[i] for i in indices if i%3!=0]
#將列表轉換成陣列
xtrain = np.array(xlisttrain)
ytrain = np.array(labelstrain)
xtest = np.array(xlisttest)
ytest = np.array(labelstest)
#**模型
rocksvminesmodel = linear_model.linearregression()
#訓練資料
rocksvminesmodel.fit(xtrain,ytrain)
# **訓練資料
trainingpredictions = rocksvminesmodel.predict(xtrain)
print ("---------",trainingpredictions[0:5],trainingpredictions[-6:-1])
#生成訓練資料的混淆矩陣
confusionmattrain = confusionmatrix(trainingpredictions,ytrain,0.5)
print confusionmattrain
#**測試資料
testpredictions = rocksvminesmodel.predict(xtest)
#生成測試資料的混淆矩陣
confusiontest = confusionmatrix(testpredictions,ytest,0.5)
print confusiontest
#通過roc_curve函式計算fpt,tpr,並計算roc_auc,auc越高代表越好
fpr,tpr,thresholds = roc_curve(ytrain,trainingpredictions)
roc_auc = auc(fpr,tpr)
print roc_auc
#生成訓練集上的roc曲線
#plot roc curve
pl.clf()#清楚圖形,初始化圖形的時候需要
pl.plot(fpr,tpr,label='roc curve (area=%0.2f)' %roc_auc)#畫roc曲線
pl.plot([0,1],[0,1],'k-')#生成對角線
pl.xlim([0.0,1.0])#x軸範圍
pl.ylim([0.0,1.0])#y軸範圍
pl.xlabel('false positive rate')#x軸標籤顯示
pl.ylabel('true positive rate')#y軸標籤顯示
pl.title('in sample roc rocks versus mines')#標題
pl.legend(loc="lower left")#圖例位置
pl.show()
#生成測試集上的roc曲線
fpr,tpr,thresholds = roc_curve(ytest,testpredictions)
roc_auc = auc(fpr,tpr)
print roc_auc
#plot roc curve
pl.clf()
pl.plot(fpr,tpr,label='roc curve (area=%0.2f)' %roc_auc)
pl.plot([0,1],[0,1],'k-')
pl.xlim([0.0,1.0])
pl.ylim([0.0,1.0])
pl.xlabel('false positive rate')
pl.ylabel('true positive rate')
pl.title('in sample roc rocks versus mines')
pl.legend(loc="lower right")
pl.show()
訓練集上的roc曲線
測試集上的roc曲線
python 隨機給老師分配辦公室
import random offices teachers 張老師 趙老師 高老師 劉老師 周老師 王老師 吳老師 for teacher in teachers office num random.randint 0,2 offices office num num 1for office in...
python分配 Python分配解構
根據dis,他們都被編譯成相同的位元組碼 def f1 line a,b,c line.split def f2 line a,b,c line.split def f3 line a,b,c line.split import dis dis.dis f1 2 0 load fast 0 line...
python隨機漫步 Python 隨機漫步
建立randomwalk 類 我們將使用python來生成隨機漫步資料,再使用matplotlib以引入矚目的方式將這些資料呈現出來 首先建立類randomwalk from random importchoiceclassrandomwalk 乙個生成隨機漫步資料的類 def init self,...