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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? kmeansdlg.cpp

?? knn分類模式識別可用于文本挖掘和其他的識別分類,vc代碼,
?? CPP
字號:
// KMEANSDlg.cpp : implementation file
//

#include "stdafx.h"
#include "KMEANS.h"
#include "KMEANSDlg.h"

#include <math.h>
const int RawOfOutput = 25;
//const int NumOfTrain = 170;//對測試集
const int NumOfTrain = 514;//對訓練集

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog
{
public:
	CAboutDlg();

// Dialog Data
	//{{AFX_DATA(CAboutDlg)
	enum { IDD = IDD_ABOUTBOX };
	//}}AFX_DATA

	// ClassWizard generated virtual function overrides
	//{{AFX_VIRTUAL(CAboutDlg)
	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support
	//}}AFX_VIRTUAL

// Implementation
protected:
	//{{AFX_MSG(CAboutDlg)
	//}}AFX_MSG
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
	//{{AFX_DATA_INIT(CAboutDlg)
	//}}AFX_DATA_INIT
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CAboutDlg)
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
	//{{AFX_MSG_MAP(CAboutDlg)
		// No message handlers
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CKMEANSDlg dialog

CKMEANSDlg::CKMEANSDlg(CWnd* pParent /*=NULL*/)
	: CDialog(CKMEANSDlg::IDD, pParent)
{
	//{{AFX_DATA_INIT(CKMEANSDlg)
	m_result = _T("");
	m_showres = _T("");
	//}}AFX_DATA_INIT
	// Note that LoadIcon does not require a subsequent DestroyIcon in Win32
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void CKMEANSDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialog::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CKMEANSDlg)
	DDX_Text(pDX, IDC_RecResult, m_result);
	DDX_Text(pDX, IDC_ShowRec, m_showres);
	//}}AFX_DATA_MAP
}

BEGIN_MESSAGE_MAP(CKMEANSDlg, CDialog)
	//{{AFX_MSG_MAP(CKMEANSDlg)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDKMeans, OnKMeans)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CKMEANSDlg message handlers

BOOL CKMEANSDlg::OnInitDialog()
{
	CDialog::OnInitDialog();

	// Add "About..." menu item to system menu.

	// IDM_ABOUTBOX must be in the system command range.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		CString strAboutMenu;
		strAboutMenu.LoadString(IDS_ABOUTBOX);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Set the icon for this dialog.  The framework does this automatically
	//  when the application's main window is not a dialog
	SetIcon(m_hIcon, TRUE);			// Set big icon
	SetIcon(m_hIcon, FALSE);		// Set small icon
	
	// TODO: Add extra initialization here
	
	return TRUE;  // return TRUE  unless you set the focus to a control
}

void CKMEANSDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialog::OnSysCommand(nID, lParam);
	}
}

// If you add a minimize button to your dialog, you will need the code below
//  to draw the icon.  For MFC applications using the document/view model,
//  this is automatically done for you by the framework.

void CKMEANSDlg::OnPaint() 
{
	if (IsIconic())
	{
		CPaintDC dc(this); // device context for painting

		SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

		// Center icon in client rectangle
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Draw the icon
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialog::OnPaint();
	}
}

// The system calls this to obtain the cursor to display while the user drags
//  the minimized window.
HCURSOR CKMEANSDlg::OnQueryDragIcon()
{
	return (HCURSOR) m_hIcon;
}
////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////         KMEANS 方法聚類        ///////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
//樣本結構
struct Sample
{
	int category;
	int Recresult;
	double feature[10];
}train[NumOfTrain],PCentroid,NCentroid;
 
//////////////////////////////////////////////////////////////////////
//從文本行到向量的轉換
Sample line2vector(CString line)
{
	int t,k;
	Sample tem;
	line.TrimLeft();
	//line.TrimRight();
	t = line.Find(' ');
	tem.category = atoi(line.Left(t));
	line = line.Mid(t);
	for(int i=1;i<10;i++)
	{
		line.TrimLeft();
		//line.TrimRight();
		t = line.Find(':') +1;
		k = line.Find(' ');
		tem.feature[i] = double(atoi(line.Mid(t,k - t)));
		line = line.Mid(k + 1);
	}
	return tem;
}

//////////////////////////////////////////////////////////////////////
//讀取訓練數據,存儲為Sample結構
bool ReadTrainData()
{
	FILE *Tdata;
	Tdata = fopen("data\\train.txt","rt");//對訓練集
    //Tdata = fopen("data\\test.txt","rt");//對測試集
	if(Tdata == NULL)
	{
		AfxMessageBox("File open Failed!");
	}
	CStdioFile TrainFile(Tdata);
	CString line;
	int nvector = 0;
	while(TrainFile.ReadString(line))
	{
	 	train[nvector] = line2vector(line);
		nvector++;
	}
	TrainFile.Close();
	return true;
}

//////////////////////////////////////////////////////////////////////
//取兩向量的歐氏距離
double Distance(const Sample &s1,const Sample &s2)
{
	double sum = 0;
	double Odistance = 0;
    for(int i=1;i<10;i++)
	{
		sum += pow(s1.feature[i] - s2.feature[i],2);
	}
	return Odistance = sqrt(sum);
}


//////////////////////////////////////////////////////////////////////
//更新質心
void UpdateCentroid()
{
	double NSum[10],PSum[10];
	int i;
	int NNum = 0;
	int PNum = 0;
	for(i=1;i<10;i++)
	{
		NSum[i] = 0;
		PSum[i] = 0;
	}
 	for(i=0;i<NumOfTrain;i++)
	{
		if(train[i].Recresult == -1)
		{
			NNum++;
			for(int j=1;j<10;j++)
			{
				NSum[j] += train[i].feature[j];
			}
		}
		if(train[i].Recresult == 1)
		{
			PNum++;
            for(int j=1;j<10;j++)
			{
				PSum[j] += train[i].feature[j];
			}
		}
	}
	for(i=1;i<10;i++)
	{
		NCentroid.feature[i] = NSum[i]/NNum;
		PCentroid.feature[i] = PSum[i]/PNum;
	}
}

//////////////////////////////////////////////////////////////////////
//更新各樣本識別結果

int UpdateRec(Sample Sam[])
{
	int num = 0;
	int temp;
	for(int i=0;i<NumOfTrain;i++)
	{
		temp = Sam[i].Recresult;

		Sam[i].Recresult = 
			(Distance(train[i],NCentroid) <= Distance(train[i],PCentroid))? -1:1;

		if(temp != Sam[i].Recresult)
		{
			num++;
		}
	}
	return num;
}

//////////////////////////////////////////////////////////////////////
//output
void CKMEANSDlg::output()
{
	UpdateData(true);
	int RightRec = 0;
	int WrongRec = 0;
    double Ratio;
	int Sum = 0;
	for(int i=1;i<=NumOfTrain;i++)
	{
		if(train[i-1].Recresult == train[i-1].category)//聚類正確
		{
			RightRec++;
			Sum++;
            if(i%RawOfOutput != 0 && train[i-1].Recresult == -1)
			{
				m_showres += "☆" ;
			}
			else if(i%RawOfOutput == 0 && train[i-1].Recresult == -1)
			{
				m_showres += "☆" ;
				m_showres += "\r\n";
			}
			else if(i%RawOfOutput != 0 && train[i-1].Recresult == 1)
			{
				m_showres += "○" ;
			}
            else if(i%RawOfOutput == 0 && train[i-1].Recresult == 1)
			{
				m_showres += "○" ;
				m_showres += "\r\n";
			}
		}
		else if(train[i-1].Recresult != train[i-1].category)//聚類錯誤
		{
			WrongRec++;
			Sum++;
			if(i%RawOfOutput != 0 && train[i-1].Recresult == -1)
			{
				m_showres += "★" ;
			}
			else if(i%RawOfOutput == 0 && train[i-1].Recresult == -1)
			{
				m_showres += "★" ;
				m_showres += "\r\n";
			}
			else if(i%RawOfOutput != 0 && train[i-1].Recresult == 1)
			{
				m_showres += "●" ;
			}
            else if(i%RawOfOutput == 0 && train[i-1].Recresult == 1)
			{
				m_showres += "●" ;
				m_showres += "\r\n";
			}
		}
	}
	Ratio = 100*(double)RightRec/Sum;
	m_result.Format("聚類正確率%5.1f%,\r\n正確分類數%5d,\r\n錯誤分類數%4d",Ratio,RightRec,WrongRec);
	UpdateData(false);
}


//////////////////////////////////////////////////////////////////////
//主函數
void CKMEANSDlg::OnKMeans() 
{
	while(!ReadTrainData())
	{
		MessageBox("TrainFile Read Failed!");
	}
	
	//初始化,設第一個樣本為第一類中心點,與它的距離最遠的樣本為第二類中心點
	NCentroid = train[0];
	int PNumIni = 1;
	double Max = Distance(train[0],train[1]);
	for(int i=2;i<NumOfTrain;i++)
	{
		if(Distance(train[0],train[i]) > Max)
		{
			Max = Distance(train[0],train[i]);
            PNumIni = i;
		}
	}
    PCentroid = train[PNumIni];
	for(i=0;i<NumOfTrain;i++)
	{
		train[i].Recresult = 
			(Distance(train[i],NCentroid) <= Distance(train[i],PCentroid)) ? 
			     NCentroid.category : PCentroid.category;
	}

 	//循環至各樣本的分類結果不再變化
	UpdateCentroid();
	int k = 0;
	while(UpdateRec(train) > 0)
	{
		UpdateCentroid();
		k++;
	}

	//結果輸出
	output();
	CString msg;
	msg.Format("循環次數%d",k);
    MessageBox(msg);
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本成人在线网站| 欧美国产日韩a欧美在线观看| 国产精品美女久久久久久| 国产在线观看免费一区| 欧美不卡视频一区| 精久久久久久久久久久| 亚洲精品在线网站| 国产999精品久久久久久| 中文一区二区完整视频在线观看| 成人综合婷婷国产精品久久| 欧美激情一区不卡| 91浏览器打开| 天天色 色综合| 日韩午夜三级在线| 韩国一区二区三区| 国产精品毛片a∨一区二区三区| 成人黄色免费短视频| 自拍偷在线精品自拍偷无码专区| 99久久精品国产网站| 亚洲免费观看在线视频| 欧美日韩国产一二三| 久久国产乱子精品免费女| 国产女同互慰高潮91漫画| 精品国产免费一区二区三区四区| 狠狠色丁香九九婷婷综合五月| 久久夜色精品国产噜噜av| eeuss国产一区二区三区| 亚洲成人精品在线观看| 精品国产乱子伦一区| 成人av网站在线| 天天综合色天天综合色h| 久久麻豆一区二区| 欧美亚洲一区三区| 韩国欧美国产1区| 亚洲欧美一区二区三区孕妇| 7777精品伊人久久久大香线蕉的| 国产麻豆视频一区二区| 亚洲自拍偷拍麻豆| 久久亚洲影视婷婷| 欧美日韩亚洲综合一区二区三区| 精品综合免费视频观看| 亚洲精品中文在线影院| 精品久久一区二区| 在线免费观看视频一区| 韩国成人福利片在线播放| 夜夜精品视频一区二区| 久久在线免费观看| 精品视频免费在线| 99视频有精品| 国产乱对白刺激视频不卡| 午夜精品一区二区三区三上悠亚| 国产精品情趣视频| 日韩精品一区在线| 欧美视频在线观看一区二区| 国产盗摄一区二区| 日本欧美一区二区| 亚洲美女视频在线| 亚洲国产精品t66y| 欧美电影免费提供在线观看| 欧美午夜影院一区| 91偷拍与自偷拍精品| 国产69精品一区二区亚洲孕妇 | 国产一区二区伦理| 水蜜桃久久夜色精品一区的特点| 中文字幕一区二区三中文字幕| 精品久久久久久久久久久院品网| 欧美日韩你懂的| 色网站国产精品| 99亚偷拍自图区亚洲| 国产一区二区福利| 黄色小说综合网站| 日本不卡不码高清免费观看| 亚洲在线视频免费观看| 国产精品国产精品国产专区不片| 国产喂奶挤奶一区二区三区| 精品国产百合女同互慰| 日韩精品自拍偷拍| 日韩亚洲欧美在线| 日韩欧美专区在线| 日韩一区二区三区高清免费看看| 欧美日韩国产综合一区二区三区 | 国产三级精品视频| 精品国产免费久久| 精品国产成人在线影院| 久久久五月婷婷| 精品国产一区二区三区不卡| 精品对白一区国产伦| 2023国产精品自拍| 久久久精品中文字幕麻豆发布| 精品国产露脸精彩对白| 精品日产卡一卡二卡麻豆| 精品久久久久久久人人人人传媒 | 欧美精品亚洲一区二区在线播放| 欧美色视频一区| 欧美高清视频不卡网| 欧美一区日韩一区| 2023国产精品自拍| 亚洲国产精品高清| 亚洲精品日韩一| 亚洲一级二级三级| 免费的成人av| 国产精品亚洲成人| 色婷婷综合久久久久中文| 欧美视频日韩视频| 日韩免费高清视频| 国产婷婷色一区二区三区在线| 亚洲欧洲日韩一区二区三区| 一区二区在线看| 秋霞午夜av一区二区三区| 精品午夜一区二区三区在线观看| 国产毛片精品国产一区二区三区| 成人美女视频在线观看18| 色噜噜狠狠色综合中国| 日韩欧美一区电影| 国产精品乱人伦| 五月天视频一区| 国产一区不卡视频| 在线观看视频欧美| 欧美成人a∨高清免费观看| 国产精品情趣视频| 日韩中文字幕区一区有砖一区| 国产呦萝稀缺另类资源| 国产天堂亚洲国产碰碰| 一区二区三区中文字幕电影 | 成人综合激情网| 欧美日韩精品三区| 欧美激情中文不卡| 丝袜美腿一区二区三区| 成人一级黄色片| 正在播放亚洲一区| 亚洲色图制服诱惑| 久久丁香综合五月国产三级网站| 91色综合久久久久婷婷| 欧美一卡2卡三卡4卡5免费| 中文字幕中文乱码欧美一区二区| 香蕉乱码成人久久天堂爱免费| 国产成人精品亚洲日本在线桃色| 欧美午夜一区二区| 国产精品网友自拍| 久久精品国内一区二区三区| 色狠狠一区二区三区香蕉| 2017欧美狠狠色| 三级欧美韩日大片在线看| 成人福利视频在线看| 精品久久久久久亚洲综合网| 亚洲一区二区三区在线| 成人av电影在线| 精品盗摄一区二区三区| 亚洲1区2区3区4区| 91在线无精精品入口| 国产欧美视频一区二区三区| 奇米一区二区三区| 欧美日韩视频不卡| 亚洲女厕所小便bbb| 成人晚上爱看视频| 欧美精品一区在线观看| 秋霞av亚洲一区二区三| 国产精品乱人伦| 国产一区 二区| 精品第一国产综合精品aⅴ| 青青草97国产精品免费观看 | 一区二区三区四区不卡在线| 国产v综合v亚洲欧| 日韩欧美国产系列| 日本不卡高清视频| 欧美精品99久久久**| 亚洲午夜羞羞片| 在线观看日韩一区| 一级精品视频在线观看宜春院| 成人av动漫在线| 国产精品不卡一区二区三区| 国产精品一二三| 久久影院视频免费| 狠狠色狠狠色综合| 精品国产a毛片| 国产专区综合网| 久久嫩草精品久久久久| 国产精品99久| 中文字幕成人网| 99久久免费国产| 艳妇臀荡乳欲伦亚洲一区| 在线视频欧美区| 午夜a成v人精品| 6080午夜不卡| 免费看欧美美女黄的网站| 欧美一级在线免费| 激情欧美一区二区| 欧美国产日韩在线观看| 91在线小视频| 亚洲一区二区三区四区的| 欧美乱妇15p| 久久疯狂做爰流白浆xx| 久久久久久久久免费| 成人性色生活片免费看爆迷你毛片| 国产欧美日韩视频一区二区| 不卡区在线中文字幕| 亚洲黄色免费网站| 欧美一区二区三区性视频| 久久精品久久综合| 亚洲国产精品t66y|