真菜鸟第一次写博客,记录下自己的所学的东西,也为了日后找的东西方便,类似云盘的
二分法:讲道理,也就是f(a)
1 确定区间[a,b],验证f(a)·f(b)<0,给定精确度ξ.
2 求区间(a,b)的中点c.
(1) 若f(c)=0,则c就是函数的零点;
(2) 若f(a)·f(c)<0,则令b=c;
(3) 若f(c)·f(b)<0,则令a=c.
(4) 判断是否达到精确度ξ:即若|a-b|<ξ,则得到零点近似值a(或b),否则重复2-4
以下是R的代码:
f<-function(x) x^3-x-1
binary<-function(f,a,b,Accuracy){
if(f(a)*f(b)>0){
print("NO solution")
}else{
while(abs(a-b)>Accuracy){
mid<-(a+b)/2
if(f(mid)*f(a)>0){
a=mid
}else if(f(mid)*f(a)==0){
return(mid)
}else{
b=mid
}
}
return(mid)
}
}
binary(f,1,2,1e-6)
binary<-function(f,a,b,Accuracy){
if(f(a)*f(b)>0){
print("NO solution")
}else{
while(abs(a-b)>Accuracy){
mid<-(a+b)/2
if(f(mid)*f(a)>0){
a=mid
}else if(f(mid)*f(a)==0){
return(mid)
}else{
b=mid
}
}
return(mid)
}
}
binary(f,1,2,1e-6)
knn算法:分为测试元组和训练元组
流程:1.先分别算出测试元组到训练元组的距离
2.得到的距离按递增顺序排序
3.得出每个测试元组到训练元组最近的K个样本
4.计算K个样本中出现的类别频率的最高的样本
5.于测试样本的类别作比较,得出结果
trans<- iris[sample(1:nrow(iris),nrow(iris)*0.7,replace = FALSE),]
test<-iris[-sample(1:nrow(iris),nrow(iris)*0.7,replace = FALSE),]
matrix<-NULL
knn<-function(trans,test,k){
test_temp<-NULL
predict_temp<-NULL
#计算测试元祖到这K个训练元祖的距离,
#即用test[i,]与trans的每一列对应的值相减平方
#训练元组标号和距离存入优先级队列
for(i in 1:nrow(test)){
distance = apply(trans[,1:4],1,function(x)sqrt((sum(test[i,1:4]-x)^2)))
df<-data.frame(trans$Species,distance)
#按距离递增顺序排序
newdf<-df[order(df$distance),]
#选取与当前距离最小的k个点
#确定K 个点所在类别出现的频率
# print(newdf[1:k,1])
test_temp<-rbind(test_temp,as.character(test[i,5]))
predict_temp<-rbind(predict_temp,names(which.max(table(newdf[1:k,1]))))
}
matrix<-cbind( test_temp,predict_temp)
matrix<-as.data.frame(matrix)
names(matrix)<- c("primite","predict")
# factor(matrix)
matrix
count<-nrow(matrix)
Accurany<- nrow(matrix[which(matrix$primite==matrix$predict),])/count
Accurany
}
knn(trans,test,9)
test<-iris[-sample(1:nrow(iris),nrow(iris)*0.7,replace = FALSE),]
matrix<-NULL
knn<-function(trans,test,k){
test_temp<-NULL
predict_temp<-NULL
#计算测试元祖到这K个训练元祖的距离,
#即用test[i,]与trans的每一列对应的值相减平方
#训练元组标号和距离存入优先级队列
for(i in 1:nrow(test)){
distance = apply(trans[,1:4],1,function(x)sqrt((sum(test[i,1:4]-x)^2)))
df<-data.frame(trans$Species,distance)
#按距离递增顺序排序
newdf<-df[order(df$distance),]
#选取与当前距离最小的k个点
#确定K 个点所在类别出现的频率
# print(newdf[1:k,1])
test_temp<-rbind(test_temp,as.character(test[i,5]))
predict_temp<-rbind(predict_temp,names(which.max(table(newdf[1:k,1]))))
}
matrix<-cbind( test_temp,predict_temp)
matrix<-as.data.frame(matrix)
names(matrix)<- c("primite","predict")
# factor(matrix)
matrix
count<-nrow(matrix)
Accurany<- nrow(matrix[which(matrix$primite==matrix$predict),])/count
Accurany
}
knn(trans,test,9)