博客这东西。前两天因为下csdn资源 切换其他账号,绑定来绑定去把这个给搞丢了
虽然这个博客没记录什么太多东西 但是有些东西因为在实验室和寝室里面 迁移 没个地存 还是挺醉醉哒
也知道了每天记录的好。
至于这个博客是怎么找回的,**解除qq绑定,然后清除浏览器缓存,重新使用qq登录,就可以登录到原账号上**
清明节在学校呆了三天,哪也没去 打了两次狼人杀,其余时间都在看麦子学院的机器学习教程,学习sklearn,解决问题,发现问题,因为代码的一些问题,使用python的版本又搞回来了2.7,也是发现了anaconda的navigator的好用之处。
1.关于next()函数在python2.X与Python3.x中的差别
由于会经常用到next()(.next())函数(方法),所以还要提到另一个语法改动(实现方面也做了改动):在Python 2.7.5中,函数形式和方法形式都可以使用,而在Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。
Python 2
print 'Python', python_version()
my_generator = (letter for letter in 'abcdefg')
next(my_generator)
my_generator.next()
Python 2.7.6
'b'
Python 3
print('Python', python_version())
my_generator = (letter for letter in 'abcdefg')
next(my_generator)
Python 3.4.1
'a'
2.想要移植在pc1中所有安装的Python库
运行命令 pip freeze >requirements.txt
就会生成一个requirements.txt 文件
然后在你要使用的pc2端 命令行下,运行如下命令“`
Pip install -r requirements.txt
```
**3。关于麦子学院课程课件个人摘录备忘**
3-1 课程介绍
机器学习 (Machine Learning, ML)
2.1 概念:多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。专门研究计算机怎样模拟或实现人类的学习行为,以获取新的知识或技能,重新组织已有的知识结构使之不断改善自身的性能。
2.2 学科定位:人工智能(Artificial Intelligence, AI)的核心,是使计算机具有智能的根本途径,其应用遍及人工智能的各个领域,它主要使用归纳、综合而不是演绎。
2.3 定义:探究和开发一系列算法来如何使计算机不需要通过外部明显的指示,而可以自己通过数据来学习,建模,并且利用建好的模型和新的输入来进行预测的学科。
3-2 基本概念
4. 训练集(training set/data)/训练样例(training examples): 用来进行训练,也就是产生模型或者算法的数据集
测试集(testing set/data)/测试样例 (testing examples):用来专门进行测试已经学习好的模型或者算法的数据集
特征向量(features/feature vector):属性的集合,通常用一个向量来表示,附属于一个实例
标记(label): c(x), 实例类别的标记
正例(positive example)
反例(negative example)
- 分类 (classification): 目标标记为类别型数据(category)
回归(regression): 目标标记为连续性数值 (continuous numeric value) 例子:研究肿瘤良性,恶性于尺寸,颜色的关系
特征值:肿瘤尺寸,颜色
标记:良性/恶性有监督学习(supervised learning): 训练集有类别标记(class label)
无监督学习(unsupervised learning): 无类别标记(class label)
半监督学习(semi-supervised learning):有类别标记的训练集 + 无标记的训练集机器学习步骤框架
8.1 把数据拆分为训练集和测试集
8.2 用训练集和训练集的特征向量来训练算法
8.2 用学习来的算法运用在测试集上来评估算法 (可能要设计到调整参数(parameter tuning), 用验证集(validation set)
3-3 决策树
1. 什么是决策树/判定树(decision tree)?
判定树是一个类似于流程图的树结构:其中,每个内部结点表示在一个属性上的测试,每个分支代表一个属性输出,而每个树叶结点代表类或类分布。树的最顶层是根结点。
算法:
树以代表训练样本的单个结点开始(步骤1)。
如果样本都在同一个类,则该结点成为树叶,并用该类标号(步骤2 和3)。
否则,算法使用称为信息增益的基于熵的度量作为启发信息,选择能够最好地将样本分类的属性(步骤6)。该属性成为该结点的“测试”或“判定”属性(步骤7)。在算法的该版本中,
所有的属性都是分类的,即离散值。连续属性必须离散化。
对测试属性的每个已知的值,创建一个分枝,并据此划分样本(步骤8-10)。
算法使用同样的过程,递归地形成每个划分上的样本判定树。一旦一个属性出现在一个结点上,就不必该结点的任何后代上考虑它(步骤13)。
递归划分步骤仅当下列条件之一成立停止:
(a) 给定结点的所有样本属于同一类(步骤2 和3)。
(b) 没有剩余属性可以用来进一步划分样本(步骤4)。在此情况下,使用多数表决(步骤5)。
这涉及将给定的结点转换成树叶,并用样本中的多数所在的类标记它。替换地,可以存放结
点样本的类分布。
(c) 分枝
test_attribute = a i 没有样本(步骤11)。在这种情况下,以 samples 中的多数类
创建一个树叶(步骤12)
5. 决策树的优点:
直观,便于理解,小规模数据集有效
6. 决策树的缺点:
处理连续变量不好
类别较多时,错误增加的比较快
可规模性一般(
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 31 13:02:19 2017
@author: Lucask
"""
from sklearn.feature_extraction import DictVectorizer
import csv
from sklearn import preprocessing
from sklearn import tree
from sklearn.externals.six import StringIO
allElectronicsData = open(r'C:\Users\Lucask\Desktop\python test\sklearn_test\AllElectronics.csv','rb')
reader = csv.reader(allElectronicsData) #按行读取内容
headers = reader.next()
print(headers) #将特征值的标题头提取出来
featureList= []
labelList = []
for row in reader:
labelList.append(row[len(row)-1])
rowDict = {}
for i in range(1,len(row)-1):
rowDict[headers[i]] = row[i]
featureList.append(rowDict)
print(featureList)
vec = DictVectorizer()
dummyX = vec.fit_transform(featureList).toarray()
######调用库对特征值的数值转化#################################
print("dummyX:"+str(dummyX))
print(vec.get_feature_names())
print("LabelList:"+str(labelList))
##############################################################
##############调用函数对分类的最后一个值进行转化###############
lb = preprocessing.LabelBinarizer()
dummyY = lb.fit_transform(labelList)
print("dummyY:"+str(dummyY))
#############################################################
# Using decision tree for classification
# clf = tree.DecisionTreeClassifier()
clf = tree.DecisionTreeClassifier(criterion='entropy')
clf = clf.fit(dummyX,dummyY)
print("clf:"+str(clf))
# Visulize model
with open("allEctronicInformationGainOri.dot",'w') as f:
f = tree.export_graphviz(clf,feature_names=vec.get_feature_names(),out_file = f)
######此两行代码设置参数 对原表格中的数据读取,进行输出############
oneRowX = dummyX[0, :]
print("oneRowX:"+str(oneRowX))
##############################################################
######此行为对新数据的更改########################################
newRowX = oneRowX
newRowX[0] = 1
newRowX[2] = 0
###############################################################################
print("oneRowX:" + str(newRowX))
predictedY = clf.predict(newRowX)
print("predictedY" + str(predictedY))
3-4 KNN算法
综述
1.1 Cover和Hart在1968年提出了最初的邻近算法
1.2 分类(classification)算法
1.3 输入基于实例的学习(instance-based learning), 懒惰学习(lazy learning)算法详述
3.1 步骤:
为了判断未知实例的类别,以所有已知类别的实例作为参照
选择参数K
计算未知实例与所有已知实例的距离
选择最近K个已知实例
根据少数服从多数的投票法则(majority-voting),让未知实例归类为K个最邻近样本中最多数的类别
# -*- coding: utf-8 -*-
"""
Created on Sat Apr 01 16:28:40 2017
@author: Lucask
"""
import csv
import random
import math
import operator
#################导入数据集###################################################
def loadDataset(filename, split, trainingSet=[] , testSet=[]):
with open(filename, 'rb') as csvfile:
lines = csv.reader(csvfile) #读取每行数据
dataset = list(lines) #变为列表数据
for x in range(len(dataset)-1):
for y in range(4):
dataset[x][y] = float(dataset[x][y])
if random.random() < split: #判断是否小于设置的split值
trainingSet.append(dataset[x]) #加载到训练集
else:
testSet.append(dataset[x]) #加载到测试集
################################################################################
#########################计算欧氏距离###############################################
def euclideanDistance(instance1, instance2, length): #length维度
distance = 0
for x in range(length):
distance += pow((instance1[x] - instance2[x]), 2)
return math.sqrt(distance)
################################################################################
def getNeighbors(trainingSet, testInstance, k):
distances = []
length = len(testInstance)-1
for x in range(len(trainingSet)):
dist = euclideanDistance(testInstance, trainingSet[x], length)
distances.append((trainingSet[x], dist))
distances.sort(key=operator.itemgetter(1))
neighbors = []
for x in range(k):
neighbors.append(distances[x][0])
return neighbors
def getResponse(neighbors):
classVotes = {}
for x in range(len(neighbors)):
response = neighbors[x][-1]
if response in classVotes:
classVotes[response] += 1
else:
classVotes[response] = 1
sortedVotes = sorted(classVotes.iteritems(), key=operator.itemgetter(1), reverse=True)
return sortedVotes[0][0]
def getAccuracy(testSet, predictions):
correct = 0
for x in range(len(testSet)):
if testSet[x][-1] == predictions[x]:
correct += 1
return (correct/float(len(testSet))) * 100.0
def main():
# prepare data
trainingSet=[]
testSet=[]
split = 0.67
loadDataset(r'C:\Users\Lucask\Desktop\python test\sklearn_test\iris.data.txt', split, trainingSet, testSet)
print 'Train set: ' + repr(len(trainingSet))
print 'Test set: ' + repr(len(testSet))
# generate predictions
predictions=[]
k = 3
for x in range(len(testSet)):
neighbors = getNeighbors(trainingSet, testSet[x], k)
result = getResponse(neighbors)
predictions.append(result)
print('> predicted=' + repr(result) + ', actual=' + repr(testSet[x][-1]))
accuracy = getAccuracy(testSet, predictions)
print('Accuracy: ' + repr(accuracy) + '%')
main()
后面太多了 懒得放了。。基本都是很简单的。难的还没涉及
Practice makes perfect !