亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? smo.cpp

?? 基于SMO算法的支持向量機(jī)
?? CPP
字號:
/******************************************************
 * 基于SMO算法的支持向量機(jī)
 * 詳情請見D:\下載資料\計(jì)算語言學(xué)\支持向量機(jī)\smo.pdf
 *****************************************************/
#include "smo.h"

//全局變量
int N=0;
int d=-1;
double C=0.05;
double tolerance=0.001;
double eps=0.001;
double two_sigma_squared=2;
double delta_b=0;

vector<double> alph;             //lagrange 乘因子
double b;
vector<double> w;                   //權(quán)系數(shù)向量w,僅用于線性的核函數(shù)

vector<double> error_cache;



//存儲數(shù)據(jù),只使用其中一個變量
vector<sparse_binary_vector> sparse_binary_points;
vector<sparse_vector> sparse_points;
vector<dense_vector> dense_points;

vector<int> target;   //訓(xùn)練數(shù)據(jù)的分類標(biāo)簽
bool is_sparse_data=false;
bool is_binary=false;
bool is_test_only=false;
bool is_linear_kernel=false;

int first_test_i=0;
int end_support_i=-1;
vector<double> precomputed_self_dot_product;

double (*dot_product_func)(int,int)=NULL;//計(jì)算兩個樣本之間的點(diǎn)積
double (*learned_func)(int)=NULL;//學(xué)習(xí)函數(shù)
double (*kernel_func)(int,int)=NULL;//核函數(shù)
 
int examineExample(int i1)
{
	double y1,alph1,E1,r1;
	y1=target[i1];
	alph1=alph[i1];
	if(alph1>0&&alph1<C)
		E1=error_cache[i1];
	else
		E1=learned_func(i1)-y1;

	r1=y1*E1;
	if((r1-tolerance&&alph1<C)||(r1>tolerance&&alph1>0))//不滿足KKT條件
	{
		//尋找第二個權(quán)值更新,并返回
		//尋找|E1-E2|最大的,18b
		{
			int k,i2;
			double tmax;
			for(i2=-1,tmax=0,k=0;k<end_support_i;k++)
				if(alph[k]>0&&alph[k]<C)
				{
					double E2,temp;					
					E2=error_cache[k];
					temp=fabs(E1-E2);
					if(temp>tmax)
					{
						tmax=temp;
						i2=k;
					}
				}
				if(i2>=0)
				{
					if(takeStep(i1,i2))
						return 1;
				}
		}
		//尋找非邊界樣本19b
		{
			int k,k0;
			int i2;
			for(k0=(int)((rand()/RAND_MAX)*end_support_i),k=k0;k<end_support_i+k0;k++)
			{
				i2=k%end_support_i;
				if(alph[i2]>0&&alph[i2]<C)
				{
					if(takeStep(i1,i2))
						return 1;
				}
			}
		}
		//尋找整個樣本19c
		{
			int k0,k,i2;
			for(k0=(int)((rand()/RAND_MAX)*end_support_i),k=k0;k<end_support_i+k0;k++)
			{
				i2=k%end_support_i;
				if(takeStep(i1,i2))
					return 1;
			}
		}

	}
	return 0;
}

int takeStep(int i1,int i2)
{
	int y1,y2,s;
	double alph1,alph2;//舊的權(quán)值
	double a1,a2;  //新的權(quán)值
	double E1,E2,L,H,k11,k22,k12,eta,lobj,hobj;

	if(i1==i2)
		return 0;
	//21a
	alph1=alph[i1];
	y1=target[i1];
	if(alph1>0&&alph1<C)
		E1=error_cache[i1];
	else
		E1=learned_func(i1)-y1;
	alph2=alph[i2];
	y2=target[i2];
	if(alph2>0&&alph2<C)
		E2=error_cache[i2];
	else
		E2=learned_func(i2)-y2;


	s=y1*y2;
	//22a
	if(y1==y2)
	{
		double gamma=alph1+alph2;
		if(gamma>C)
		{
			L=gamma-C;
			H=C;
		}
		else
		{
			L=0;
			H=gamma;
		}
	}
	else
	{
		double gamma=alph1-alph2;
		if(gamma>0)
		{
			L=0;H=C-gamma;
		}
		else
		{
			L=-gamma;H=C;
		}
	}

	if(L==H)
		return 0;
	//22b
	k11=kernel_func(i1,i1);
	k12=kernel_func(i1,i2);
	k22=kernel_func(i2,i2);
	eta=2*k12-k11-k12;

	if(eta<0)
	{
		a2=alph2+y2*(E2-E1)/eta;
		if(a2<L)
			a2=L;
		else if(a2>H)
			a2=H;
	}
	else
	{
		//22d
		double c1=eta/2;
		double c2=y2*(E1-E2)-eta*alph2;
		lobj=c1*L*L+c2*L;
		hobj=c1*H*H+c2*H;
	
		if(lobj>hobj+eps)
			a2=L;
		else if(lobj<hobj-eps)
			a2=H;
		else
			a2=alph2;
	}
	if(fabs(a2-alph2)<eps*(a2+alph2+eps))
		return 0;
	a1=alph1-s*(a2-alph2);
	if(a1<0)
	{
		a2+=s*a1;
		a1=0;
	}
	else if(a1>C)
	{
		double t=a1-C;
		a2+=s*t;
		a1=C;
	}
	//更新b 23a
	{
		double b1,b2,bnew;
		if(a1>0&&a1<C)
			bnew=b+E1+y1*(a1-alph1)*k11+y2*(a2-alph2)*k12;
		else
		{
			if(a2>0&&a2<C)
				bnew=b+E2+y1*(a1-alph1)*k12+y2*(a2-alph2)*k22;
			else
			{
				b1=b+E1+y1*(a1-alph1)*k11+y2*(a2-alph2)*k12;
				b2=b+E2+y1*(a1-alph1)*k12+y2*(a2-alph2)*k22;
				bnew=(b1+b2)/2;
			}
		}
		delta_b=bnew-b;
		b=bnew;
	}
	//如果使用線性的核函數(shù),需要更新權(quán)向量 23c
	if(is_linear_kernel)
	{
		double t1=y1*(a1-alph1);
		double t2=y2*(a2-alph2);
		if(is_sparse_data&&is_binary)
		{
			int p1,num1,p2,num2;
			num1=(int)sparse_binary_points[i1].id.size();
			for(p1=0;p1<num1;p1++)
				w[sparse_binary_points[i1].id[p1]]+=t1;
			num2=(int)sparse_binary_points[i2].id.size();
			for(p2=0;p2<num2;p2++)
				w[sparse_binary_points[i2].id[p2]]+=t2;
		}
		else if(is_sparse_data&&!is_binary)
		{
			int p1,num1,p2,num2;
			num1=(int)sparse_points[i1].id.size();
			for(p1=0;p1<num1;p1++)
				w[sparse_points[i1].id[p1]]+=t1*sparse_points[i1].val[p1];
			num2=(int)sparse_points[i2].id.size();
			for(p2=0;p2<num2;p2++)
				w[sparse_points[i2].id[p2]]+=t2*sparse_points[i2].val[p2];
		}
		else
			for(int i=0;i<d;i++)
				w[i]+=dense_points[i1][i]*t1+dense_points[i2][i]*t2;
	}
	//更新錯誤率 24a
	{
		double t1=y1*(a1-alph1);
		double t2=y2*(a2-alph2);
		for(int i=0;i<end_support_i;i++)
			if(0<alph[i]&&alph[i]<C)
				error_cache[i]+=t1*kernel_func(i1,i)+t2*kernel_func(i2,i)-delta_b;
		error_cache[i1]=0;
		error_cache[i2]=0;
	}
	alph[i1]=a1;
	alph[i2]=a2;
	return 1;
}

double learned_func_linear_sparse_binary(int k)
{
	double s=0;
	for(int i=0;i<(int)sparse_binary_points[k].id.size();i++)
		s+=w[sparse_binary_points[k].id[i]];
	s-=b;
	return s;
}
double learned_func_linear_sparse_nobinary(int k)
{
	double s=0;
	for(int i=0;i<(int)sparse_points[k].id.size();i++)
	{
		int j=sparse_points[k].id[i];
		double v=sparse_points[k].val[i];
		s+=w[j]*v;
	}
	s-=b;
	return s;
}
double learned_func_linear_dense(int k)
{
	double s=0;
	for(int i=0;i<d;i++)
		s+=w[i]*dense_points[k][i];
	s-=b;
	return s;
}
double learned_func_nonlinear(int k)
{
	double s=0;
	for(int i=0;i<end_support_i;i++)
		if(alph[i]>0)
			s+=alph[i]*target[i]*kernel_func(i,k);
	s-=b;
	return s;
}
double dot_product_sparse_binary(int i1,int i2)
{
	int p1=0,p2=0,dot=0;
	int num1=(int)sparse_binary_points[i1].id.size();
	int num2=(int)sparse_binary_points[i2].id.size();
	while(p1<num1&&p2<num2)
	{
		int a1=(int)sparse_binary_points[i1].id[p1];
		int a2=(int)sparse_binary_points[i2].id[p2];
		if(a1==a2)
		{
			dot++;p1++;p2++;
		}
		else if(a1>a2)
			p2++;
		else
			p1++;
	}
	return (double)dot;
}
double dot_product_sparse_nonbinary(int i1,int i2)
{
	int p1=0,p2=0;
	double dot=0;
	int num1=(int)sparse_points[i1].id.size();
	int num2=(int)sparse_points[i2].id.size();
	while(p1<num1&&p2<num2)
	{
		int a1=sparse_points[i1].id[p1];
		int a2=sparse_points[i2].id[p2];
		if(a1==a2)
		{
			dot+=sparse_points[i1].val[p1]*sparse_points[i2].val[p2];
			p1++;
			p2++;
		}
		else if(a1>a2)
			p2++;
		else
			p1++;
	}
	return (double)dot;
}
double dot_product_dense(int i1,int i2)
{
	double dot=0;
	for(int i=0;i<d;i++)
		dot+=dense_points[i1][i]*dense_points[i2][i];
	return dot;
}
double rbf_kernel(int i1,int i2)
{
	double s=dot_product_func(i1,i2);
	s*=-2;
	s+=precomputed_self_dot_product[i1]+precomputed_self_dot_product[i2];
	return exp(-s/two_sigma_squared);
}
int read_data(istream& is)
{
	string s;
	int n_lines;
	for(n_lines=0;getline(is,s,'\n');n_lines++)
	{
		istrstream line(s.c_str());
		vector<double> v;
		double t;
		while(line>>t)
			v.push_back(t);
		target.push_back((int)v.back());
		v.pop_back();
		int n=(int)v.size();
		if(is_sparse_data&&is_binary)
		{
			sparse_binary_vector x;
			for(int i=0;i<n;i++)
			{
				if(v[i]<1||v[i]>d)
				{
#ifdef INFO
					cout<<"error:line"<<n_lines+1<<":attribute_index"<<int(v[i])<<"out of range."<<endl;
#endif
					return 0;
				}
				x.id.push_back(int(v[i])-1);
			}
		}
		else if (is_sparse_data&&!is_binary)
		{
			sparse_vector x;
			for(int i=0;i<n;i+=2)
			{
				if(v[i]<1||v[i]>d)
				{
#ifdef INFO
					cout<<"data file error:line"<<n_lines+1<<":attribute index "<<int(v[i])<<" out of range."<<endl;
#endif
					return 0;
				}
				x.id.push_back(int(v[i])-1);
				x.val.push_back(v[i+1]);
			}
			sparse_points.push_back(x);
		}
	else
	{
		if(v.size()!=d)
		{
#ifdef INFO
			cout<<"data file error:line "<<n_lines+1<<" has "<<(int)v.size()<<" attributes;should be d="<<d<<endl;
#endif
			return 0;
		}
		dense_points.push_back(v);
	}
	}
	return n_lines;
}
void write_svm(ostream& os)
{
	os<<d<<endl;
	os<<is_sparse_data<<endl;
	os<<is_binary<<endl;
	os<<is_linear_kernel<<endl;
	os<<b<<endl;
	if(is_linear_kernel)
	{
		for(int i=0;i<d;i++)
			os<<w[i]<<endl;
	}
	else
	{
		os<<two_sigma_squared<<endl;
		int n_support_vectors=0;
		for(int i=0;i<end_support_i;i++)
			if(alph[i]>0)
				n_support_vectors++;
		os<<n_support_vectors<<endl;
		for(int i=0;i<end_support_i;i++)
			if(alph[i]>0)
				os<<alph[i]<<endl;
		for(int i=0;i<end_support_i;i++)
			if(alph[i]>0)
			{
				if(is_sparse_data&&is_binary)
				{
					for(int j=0;j<(int)sparse_binary_points[i].id.size();j++)
						os<<(sparse_binary_points[i].id[j]+1)<<' ';
				}
				else if(is_sparse_data&&!is_binary)
				{
					for(int j=0;j<(int)sparse_points[i].id.size();j++)
						os<<(sparse_points[i].id[j]+1)<<' '<<sparse_points[i].val[j]<<' ';
				}
				else
				{
					for(int j=0;j<d;j++)
						os<<dense_points[i][j]<<' ';
				}
				os<<target[i];
				os<<endl;
			}
	}
}
int read_svm(istream& is)
{
	is>>d;
	is>>is_sparse_data;
	is>>is_binary;
	is>>is_linear_kernel;
	is>>b;
	if(is_linear_kernel)
	{
		w.resize(d);
		for(int i=0;i<d;i++)
			is>>w[i];
	}
	else
	{
		is>>two_sigma_squared;
		int n_support_vectors;
		is>>n_support_vectors;
		alph.resize(n_support_vectors,0);
		for(int i=0;i<n_support_vectors;i++)
			is>>alph[i];
		string dummy_line_to_skip_newline;
		getline(is,dummy_line_to_skip_newline,'\n');
		return read_data(is);
	}
	return 0;
}
double error_rate()
{
	int n_total=0;
	int n_error=0;
	for(int i=first_test_i;i<N;i++)
	{
		if(learned_func(i)>0!=target[i]>0)
			n_error++;
		n_total++;
	}
	return double(n_error)/double(n_total);
}
int smo(string data_file_name,string svm_file_name)
{
	//31a
	string output_file_name;
	int numChanged;
	int examineAll;
	//獲得參數(shù)29d
	N=0;//訓(xùn)練樣本的總數(shù)
	d=2;//樣本空間的維數(shù)
	C=0.01;//懲罰因子
	tolerance=0.001;//滿足KKT條件的容忍度
	eps=0.001;
	two_sigma_squared=2;//徑向基核函數(shù)的參數(shù)
	data_file_name="svm.data";//數(shù)據(jù)文件
	svm_file_name="svm.model";//模型文件
	output_file_name="svm.output";//輸出文件
	is_linear_kernel=false;//是否是線性的核函數(shù)
	is_sparse_data=false;//是否是稀疏數(shù)據(jù)
	is_binary=false;//是否是二進(jìn)制數(shù)據(jù)
	is_test_only=false;
	
	//讀入數(shù)據(jù)31c
	{
		int n;
		if(is_test_only)
		{
			ifstream svm_file(svm_file_name.c_str());
			end_support_i=first_test_i=n=read_svm(svm_file);
			N+=n;
		}
		if(N>0)
		{
			target.reserve(N);
			if(is_sparse_data&&is_binary)
				sparse_binary_points.reserve(N);
			else if(is_sparse_data&&!is_binary)
				sparse_points.reserve(N);
			else
				dense_points.reserve(N);
		}
		ifstream data_file(data_file_name.c_str());
		if(!data_file.is_open())
			return 1;
		n=read_data(data_file);
		if(n<=0)
			return 2;
		if(is_test_only)
		{
			N=first_test_i+n;
		}
		else
		{
			N=n;
			first_test_i=0;
			end_support_i=N;
		}
	}
	if(!is_test_only)
	{
		alph.resize(end_support_i,0.0);
		b=0;
		error_cache.resize(N);
		if(is_linear_kernel)
			w.resize(d,0.0);
	}

	//初始化學(xué)習(xí)函數(shù),點(diǎn)積和核函數(shù) 26a
	if(is_linear_kernel&&is_sparse_data&&is_binary)
		learned_func=learned_func_linear_sparse_binary;
	if(is_linear_kernel&&is_sparse_data&&!is_binary)
		learned_func=learned_func_linear_sparse_nobinary;
	if(is_linear_kernel&&!is_sparse_data)
		learned_func=learned_func_linear_dense;
	if(!is_linear_kernel)
		learned_func=learned_func_nonlinear;
	if(is_sparse_data&&is_binary)
		dot_product_func=dot_product_sparse_binary;
	if(is_sparse_data&&!is_binary)
		dot_product_func=dot_product_sparse_nonbinary;
	if(!is_sparse_data)
		dot_product_func=dot_product_dense;
	if(is_linear_kernel)
		kernel_func=dot_product_func;
	if(!is_linear_kernel)
		kernel_func=rbf_kernel;
	if(!is_linear_kernel)
	{
		precomputed_self_dot_product.resize(N);
		for(int i=0;i<N;i++)
			precomputed_self_dot_product[i]=dot_product_func(i,i);
	}

	if(!is_test_only)
	{
		numChanged=0;
		examineAll=1;
		while(numChanged>0||examineAll)
		{
			numChanged=0;
			if(examineAll)
			{
				for(int k=0;k<N;k++)
					numChanged+=examineExample(k);
			}
			else
			{
				for(int k=0;k<N;k++)
					if(alph[k]!=0&&alph[k]!=C)
						numChanged+=examineExample(k);
			}
			if(examineAll==1)
				examineAll=0;
			else if(numChanged==0)
				examineAll=1;
			//診斷信息36d
		}
		//輸出模型參數(shù)36a
		{
			if((!is_test_only)&&(!svm_file_name.empty()))
			{
				ofstream svm_file(svm_file_name.c_str());
				write_svm(svm_file);
			}
		}
#ifdef INFO
		cout<<"threshold="<<b<<endl;
#endif
	}
#ifdef INFO
	cout<<"訓(xùn)練完畢,錯誤率為: "<<error_rate()<<endl;
#endif
	//輸出分類36c
	return 0;
}
int load_svm(string svm_file_name)
{
	int n;
	//初始化學(xué)習(xí)函數(shù)和核函數(shù)

	N=0;
	d=2;//樣本空間的維數(shù)
	C=0.01;//懲罰因子
	tolerance=0.001;//滿足KKT條件的容忍度
	eps=0.001;
	ifstream svm_file(svm_file_name.c_str());
	if(!svm_file.is_open())
		return 1;
	end_support_i=first_test_i=n=read_svm(svm_file);
	if(n<=0)
		return 2;
	N+=n;
	return 0;
}
double predict_func(const vector<double>& vx)
{
	double s=0;
	for(int i=0;i<end_support_i;i++)
		if(alph[i]>0)
			s+=alph[i]*target[i]*kernel(dense_points[i],vx);
	s-=b;
	return s;
}
double kernel(const vector<double>& vx1,const vector<double>& vx2)
{
	if(vx1.size()!=vx2.size())
		return 0;
	double dot=0;
	for(int j=0;j<d;j++)
		dot+=(vx1[j]-vx2[j])*(vx1[j]-vx2[j]);
	dot/=2;
	return -dot;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧洲在线观看av| 看片网站欧美日韩| 天天亚洲美女在线视频| 高清成人免费视频| 69p69国产精品| 亚洲欧美另类综合偷拍| 国产一区 二区| 91精品欧美久久久久久动漫| 国产精品久久777777| 美女网站色91| 在线精品视频免费播放| 国产精品久久久久久久久免费相片 | 色综合中文字幕| 精品福利一区二区三区| 日韩黄色在线观看| 色婷婷激情久久| 亚洲人成在线播放网站岛国| 丁香桃色午夜亚洲一区二区三区| 7777精品久久久大香线蕉| 一区二区三区高清在线| av激情综合网| 国产精品欧美一级免费| 国产成人精品三级麻豆| 26uuu欧美日本| 久久se精品一区精品二区| 欧美一区二区三区白人| 午夜激情综合网| 欧美视频你懂的| 亚洲成人黄色影院| 欧美三级电影精品| 午夜激情一区二区| 欧美精品日韩一区| 日韩中文字幕区一区有砖一区 | 亚洲综合色区另类av| 一本大道久久精品懂色aⅴ| 亚洲欧洲精品一区二区精品久久久| 国产乱码精品1区2区3区| www欧美成人18+| 丁香网亚洲国际| 国产精品久久久久久久久快鸭| 波多野结衣中文字幕一区二区三区 | 一区二区三区四区在线播放 | 亚洲国产成人精品视频| 欧美在线你懂的| 丝袜脚交一区二区| 日韩欧美电影一二三| 九色porny丨国产精品| 久久理论电影网| 成人app在线| 亚洲国产成人精品视频| 日韩欧美综合在线| 国产夫妻精品视频| 亚洲视频在线一区观看| 欧美色大人视频| 久久99精品一区二区三区| 久久影院电视剧免费观看| 成人性视频免费网站| 亚洲精品中文在线| 欧美一区二区女人| 国产精品亚洲人在线观看| 国产精品久久久久桃色tv| 一本到高清视频免费精品| 日韩va欧美va亚洲va久久| 欧美电视剧免费观看| 麻豆精品视频在线观看| 欧美激情一区二区三区| 色综合天天综合网国产成人综合天 | 亚洲欧美日韩国产一区二区三区 | 亚洲成人激情自拍| 欧美精品一区二区蜜臀亚洲| zzijzzij亚洲日本少妇熟睡| 亚洲二区视频在线| 中文字幕乱码久久午夜不卡| 欧美少妇xxx| 国产一区二区电影| 亚洲制服丝袜av| 久久九九久精品国产免费直播| 在线观看av不卡| 国产91清纯白嫩初高中在线观看 | 老司机精品视频线观看86| 国产精品欧美综合在线| 日韩三级免费观看| 91麻豆国产精品久久| 紧缚奴在线一区二区三区| 一区二区三区在线免费视频| 久久色.com| 欧美一区二区三区在线视频| 色综合色狠狠天天综合色| 国产成人av一区| 青青国产91久久久久久| 亚洲人成伊人成综合网小说| 精品久久久久久久人人人人传媒| 日本精品视频一区二区| 国产+成+人+亚洲欧洲自线| 麻豆精品一二三| 狠狠色狠狠色综合系列| 亚洲国产精华液网站w| 日韩美女天天操| 欧美主播一区二区三区美女| 成人综合在线网站| 国产一区二区调教| 欧美aaaaaa午夜精品| 亚洲第一成年网| 亚洲人成网站色在线观看| 国产欧美视频在线观看| 久久综合九色综合97婷婷| 欧美一区二区三区视频| 欧美日韩一级大片网址| 91片在线免费观看| 91原创在线视频| av成人免费在线| 99re在线精品| 色综合久久综合网欧美综合网 | 奇米精品一区二区三区在线观看| 一区二区三区四区在线| 亚洲美女一区二区三区| 日韩一区欧美一区| 国产精品色哟哟| 亚洲欧美综合色| 国产精品久久久久一区二区三区| 中文字幕一区二区三区不卡| 中文字幕视频一区| 成人欧美一区二区三区| 亚洲色欲色欲www| 亚洲精品免费看| 性感美女极品91精品| 亚洲成av人片在线观看无码| 午夜不卡av免费| 久久97超碰国产精品超碰| 国产最新精品精品你懂的| 国产麻豆欧美日韩一区| 丁香一区二区三区| 91黄色激情网站| 3d成人h动漫网站入口| 91精品国产综合久久精品app| 欧美一区二区三区的| 精品国产一区二区三区四区四| www欧美成人18+| 亚洲视频你懂的| 午夜日韩在线观看| 精品制服美女久久| 不卡视频在线看| 在线播放视频一区| 久久女同互慰一区二区三区| 国产精品国产三级国产aⅴ原创 | 欧美性色黄大片| 日韩欧美在线网站| 国产日产亚洲精品系列| 亚洲美女屁股眼交3| 丝袜国产日韩另类美女| 国产一区中文字幕| 99久久国产综合精品女不卡| 欧美日韩激情在线| 亚洲精品在线观看网站| 亚洲三级久久久| 精品亚洲成a人在线观看| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 欧美日韩黄色影视| 中文无字幕一区二区三区| 亚洲免费观看高清在线观看| 青青草视频一区| 91视频xxxx| 国产婷婷一区二区| 视频一区二区三区中文字幕| 成人av网址在线观看| 日韩一级二级三级| 一区二区三区欧美在线观看| 久久激情综合网| 欧美午夜精品久久久久久超碰| 国产三级一区二区三区| 三级成人在线视频| 成人丝袜高跟foot| 欧美成人精品3d动漫h| 亚洲综合成人在线视频| 成人性生交大片| 精品国产免费久久| 婷婷丁香激情综合| 色婷婷国产精品| 国产精品女同互慰在线看| 激情六月婷婷综合| 宅男在线国产精品| 亚洲国产日韩一区二区| 97久久人人超碰| 中文字幕中文字幕一区二区 | 国产三区在线成人av| 老司机精品视频在线| 3atv一区二区三区| 一区二区在线观看av| 99视频精品免费视频| 国产日韩欧美麻豆| 久久国产免费看| 日韩欧美国产1| 久久成人免费网| 日韩久久久精品| 久久精品国产第一区二区三区| 9191久久久久久久久久久| 婷婷综合另类小说色区| 欧美日韩国产影片| 日韩**一区毛片| 欧美成人精品福利|