Hallo Freunde, ich suche eine Möglichkeit um Datenbanken zu programmieren. Darin sollen viele, viele Datensätze eingelesen werden und komplexe Abfragen erstattet sein.. So nach dem Motto trifft Punkt A zu ist das vollkommen richtig. Trift Punkt A nur teilweise zu errechne die Wahrscheinlichkeit, dass A richtig ist... So in der Art. Ich hoffe Ihr versteht mein Anliegen. Achja und ne graphische Oberfläche wäre auch was feines. Evtl. sogar ne graphische Ausgabe der Abfrage á la Excel oder sowas. Kenntnisse hab ich fortgeschritten in C und Grundkenntnisse in C#. Welche Programmiersprache ist empfehlenswert? Eine extra Sprache zum DB programmieren? Alles in C zu proggen wäre sicher ein Graus... Viele Grüße, Phil
das hört sich weniger nach Datenbank, sondern eher nach Expertensystem an
Phil schrieb: > Hallo Freunde, > > ich suche eine Möglichkeit um Datenbanken zu programmieren. Darin sollen > viele, viele Datensätze eingelesen werden und komplexe Abfragen > erstattet sein.. So nach dem Motto trifft Punkt A zu ist das vollkommen > richtig. Trift Punkt A nur teilweise zu errechne die Wahrscheinlichkeit, > dass A richtig ist... So in der Art. Ich hoffe Ihr versteht mein > Anliegen. Nicht wirklich. Erst mal sehe ich nicht, warum das eine Datenbank im herkömmlichen Sinne sein muss. Datenbanken setzt man dann ein, wenn es gilt, viele Daten miteinander zu verknüpfen und so jede Information nur einmal zu speichern. Der klassische relationale Aufbau geht über Tabellen, die unter anderem auch Querverweise in andere Tabellen haben. In deinem Anforderungsprofil lässt sich nichts erkennen, was auf einen derartigen Aufbau schliessen lässt. Allerdings wird der Begriff "Datenbank" in der Programmierung gerne auch mal etwas weiter gefasst. Eine Array bestehend aus Strukturen mit den Daten darin, nennt man auch schon gerne mal die 'Datenbank des Programms' und meint damit einfach nur das dort der Platz ist, an dem alles zentral gespeichert ist. > Welche Programmiersprache ist empfehlenswert? Die, die du kannst. > Eine extra Sprache zum DB > programmieren? Alles in C zu proggen wäre sicher ein Graus... Yep. grafische Oberflächenprogrammierung in C ist zwar möglich, aber nicht lustig.
Phil schrieb: > Ich hoffe Ihr versteht mein > Anliegen. Nicht wirklich. > Achja und ne graphische Oberfläche wäre auch was feines. Evtl. sogar ne > graphische Ausgabe der Abfrage á la Excel oder sowas. Solls eine haben oder nicht? Das sollte von Anfang an klar sein, sonst wirds ein Chaos. > Kenntnisse hab ich fortgeschritten in C und Grundkenntnisse in C#. Dann nimm doch eine von denen.:-) > Welche Programmiersprache ist empfehlenswert? Achtung, gleich fängt hier ein Glaubenskrieg an... > Eine extra Sprache zum DB > programmieren? Alles in C zu proggen wäre sicher ein Graus... Wenn du c schon kannst, warum nicht, außer es widerspricht deinen Anforderungen. Diese Anforderungen solltest du auch mal ganz ausführlich irgendwo festmachen, Stichwort Lastenheft/Pflichtenheft. :-)
Hallo Phil, Schau dir doch mal QT an. Das ist C, es können "einfach" graphische Oberflächen programmiert werden. Eine Schnittstelle zu allen gängigen Datenbanken ist ebenfalls vorhanden. Beispiele gibt es auch genug im Netz. Gruß, Tom
Karl heinz Buchegger schrieb: > Nicht wirklich. > Erst mal sehe ich nicht, warum das eine Datenbank im herkömmlichen Sinne > sein muss. Datenbanken setzt man dann ein, wenn es gilt, viele Daten > miteinander zu verknüpfen und so jede Information nur einmal zu > speichern. Ok. Dann nochmal ausführlicher. Es gibt meinetwegen 100-200 Parameter. Es gibt 10000 Ereignisse. Beispiel: Parameter A: klein Parameter B: blau Parameter C: warm Ereignis 1: klein, blau, warm --> Wahrscheinlihkeit 100% Ereignis 2: klein, hellblau, warm --> Wahrscheinlichkeit 95% Eregnis 3: groß, grün, kalt --> Wahrscheinlichkeit 0% Ich hoffe damit ist es verständlicher. Ich möchte quasi Parameter und Ereignisse eingeben und auswerten lassen. Das Projekt ist auf 2 Jahre angesetzt. Mal gucken obs klappt. Wenn nicht auch gut. Aber ich brauch noch ne passende Sprache. Der Endnutzer soll nachher die Möglichkeit haben neue Ereignisse einzugeben und so die Datenbank selbständig erweitern. Zukunftsmusik bzw. nice to have wäre eine online Anbindung an eine externe von vielen Klienten bearbeitbare Datenbank. Karl heinz Buchegger schrieb: >> Welche Programmiersprache ist empfehlenswert? > > Die, die du kannst. Das kann ich ja fast nicht glauben, dass man dieses Problem am sinnvollsten in C oder C# lösen würde.. Deshalb würde ich gerne wissen welche Sprache sich für mein Problem eignet. Vlad Tepesch schrieb: > das hört sich weniger nach Datenbank, sondern eher nach Expertensystem > an Das mit dem Expertensystem hört sich gut an bzw. ist es prinzipiell das was ich machen möchte. Super! Wiki nennt folgende Sprachen: CLIPS: Softwarewerkzeug zur Erstellung von Expertensystemen. d3web: Open-source Software zur Erstellung von Expertensystemen. JESS: Regelsystem für die Java Plattform - Nachfolger und Erweiterung des CLIPS Regelsystems. Prolog: eine Logik-Programmiersprache zur Erstellung von Expertensystemen. Kennt einer eine? Oder gibts noch ne andere Empfehlung? Graphische Oberfläche und -Auswertungsmöglichkeiten wären ein Muss
Phil schrieb: > Karl heinz Buchegger schrieb: >> Nicht wirklich. >> Erst mal sehe ich nicht, warum das eine Datenbank im herkömmlichen Sinne >> sein muss. Datenbanken setzt man dann ein, wenn es gilt, viele Daten >> miteinander zu verknüpfen und so jede Information nur einmal zu >> speichern. > > Ok. Dann nochmal ausführlicher. > > Es gibt meinetwegen 100-200 Parameter. Es gibt 10000 Ereignisse. Das klärt immer noch nicht, warum das jetzt eine Datenbank im Sinne einer relationalen Datenbank sein muss und nicht einfach nur ein
1 | struct Event |
2 | {
|
3 | double Parameter[200]; |
4 | }
|
5 | |
6 | struct Event Database[10000]; |
oder meinetwegen eine verkettete Liste oder dergleichen. Eine Datenbank (mit all ihrem Overhead) setzt man dann ein, wenn man zb Rechnungen mit Kundendaten verknüpfen will. Es kann x Rechnungen geben, die alle demselben Kunden zugeordnet sind. Daher möchte man den Kunden nur einmal speichern und in die Rechnungen kommen verweise auf diesen Kunden rein. Dazu kommt dann in einer richtigen Datenbank die leidigen Probleme: Wie stellt man sicher, dass eine Operation als ganzes rückgängig gemacht werden kann, wenn eine Teiloperation schief geht; wie macht man es, dass 5 Sachbearbeiter gleichzeitig mit der Datenbank interagieren können, etc. Das sind Problemstellungen, für die sich eine richtige Datenbank lohnt. Hat man diese Problemstellungen nicht, so braucht man eine Datenbank nicht. Was nicht heißen soll, dass man nicht trotzdem eine einsetzt, einfach deswegen, weil man sie fertig hat. > Beispiel: > Parameter A: klein > Parameter B: blau > Parameter C: warm > > Ereignis 1: > klein, blau, warm --> Wahrscheinlihkeit 100% > > Ereignis 2: > klein, hellblau, warm --> Wahrscheinlichkeit 95% > > Eregnis 3: > groß, grün, kalt --> Wahrscheinlichkeit 0% > > Ich hoffe damit ist es verständlicher. Ist schon klar. Du willst von jedem Datensatz wissen, wie 'gut' er mit den Suchbegriffen übereinstimmt. Für irgendeine, noch näher zu bestimmende, Definition von 'gut'. Aber auch hier: Der Knackpunkt liegt bisher immer noch in der Definition von 'gut' also in einer Funktion f( selectionset, data ) so dass f eine Aussage darüber macht, wie gut ein bestimmter 'Datensatz' zu den Suchkriterien passt und nicht darin eine relationale Datenbank zur Verfügung zu haben. > Der Endnutzer soll nachher die Möglichkeit haben neue Ereignisse > einzugeben und so die Datenbank selbständig erweitern. Zukunftsmusik > bzw. nice to have wäre eine online Anbindung an eine externe von vielen > Klienten bearbeitbare Datenbank. Dann würde ich damit anfangen, mir eine fertige Datenbank wie zb. SQLite in Source Code zu besorgen und dort mal nachzusehen ob man die Funktion modifizieren kann, die bei einem SELECT ... WHERE die Datensätze anhand der Suchbegriffe auswählt. > Kennt einer eine? Oder gibts noch ne andere Empfehlung? Graphische > Oberfläche und -Auswertungsmöglichkeiten wären ein Muss graphische Oberfläche würde ich erst mal beiseite legen. Und zwar aus dem Grund: Ich würde eine strikte Trennung zwischen der eigentlichen Datenengine und der Ein/Ausgabe anstreben. Beides kann parallel entstehen, aber die strikte Trennung würde ich auf keinen Fall aufgeben (schon allein deswegen, weil du irgendwann online gehen willst)
Für mich hört sich das auch sehr nach Machine Learning an. Wenn die Parameter von einander unabhängig sind, ließe sich das einfach über Wahrscheinlichkeitsrechnung erarbeiten, und dann evtl. mit irgendeinem priority Datentyp sortieren. Wenn die Parameter von einander abhängig sind, ginge das mit etwas mehr Aufwand auch. Der eigentlich Sinn von Machine Learning wäre natürlich unbekannte Kombinationen vorherzusagen, aber das ließe sich vielleicht auch gut nutzen um die Datenmenge zu komprimieren.
Für so was sind C#, VB oder F# aufgrund von LINQ prädestiniert. http://msdn.microsoft.com/library/bb308959.aspx Zweiter Tipp: PowerPivot für Excel http://office.microsoft.com/de-de/excel/powerpivot-fur-excel-neuerung-HA101677286.aspx http://powerpivot.com/ Der Rest ist Zeitverschwendung.
jetzt hört sich es wieder etwas anders an. Ein Expertensystem wird von Experten entworfen und mit deren Wissen gefütert und bleibt dann immer gleich. zB, der Windows-Problem-Beseitigungsassistent ist ein Beispiel dafür. (wenn auch vielleicht nicht das beste) Was du suchst hört sich jetzt eher nach einem Klassifikator an. Du hast einen Eingeberaum von 100 Merkmalen (Farbton, temperatur, Größe) und möchtest eine Wahrscheinlichkeit für verschiedene Klassen (Ereignis1, Ereignis 2, Ereignis 3) haben. Die Frage ist, wie gut du die Zusammenhänge deiner Inputdaten kennst. entweder man erzeugt Trainingsdaten aus Messwerten der Größen mit händischer Bewertung der Klasse und trainierst damit einen Klassifikator (supervised). Im Extremfall können das auch einzelne handimplementierte Regeln sein, was dann wieder in Richtung Expertensystem geht, wobei dieses sich durch Interaktivität und schrittweises Vorgehen auszeichnet. Der Klassifikator kann dann zur Klassifikation unbekannter Eingabevektoren benutzt werden. Oder du lässt den Klassifikator selbst Klassen suchen (unsupervised, clustering). Meist sind die Klassifikatoren nach dem Training jedoch fix. Das ganze so zu entwerfen, dass zur Laufzeit ein trainierter Klassifikator mit neuen Daten 'nachtrainiert' wird ist je nach Klassifikator sehr aufwendig bis unmöglich. Such dir mal ein paar Bücher/Seiten/Infos zu den Themen 'Machinelles Lernen', 'Data Mining', 'Wissensmanagement'
@Vlad Ich bin mir immeer noch nicht sicher, ob das ganze überhaupt so komplex angedacht ist. Ich denke er will einfach nur in einem Datenwust Daten wiederfinden, die so ungefähr auf seine Suchbegriffe passen, wobei dieses 'so ungefähr' der entscheidende Punkt ist. Das klassische Problem: Du suchst in einer Datenbank nach dem "Mayer Hubert". Der bewusste Hubert schreibt sich aber nicht mit ay sondern mit ei. Die Suchanfrage nach "Mayer Hubert" liefert daher kein Ergebnis. Eine erweiterte Suche würde aber hochkommen mit: Mayer Hubert hab ich keinen gefunden. Aber mit 85% Wahrscheinlichkeit könntest du einen "Maier Hubert" gemeint haben. Jedoch nicht "Berger Helga", denn die hat nach meinen Kriterien nur 0% Übereinstimmung mit deinem Suchbegriff.
In dem Fall würde ich mal empfehlen sich mit den Themen Data Mining, web crawling und Internet Suche zu beschäftigen, evtl. könnte man einen angepassten top-k Algorithmus benutzen, um nicht immer alle Parameter für alle Ereignisse durch zu arbeiten.
Wenn ich die Aufgabe verstanden habe, könnte auch eine SQL-DB mit Stored Procedures das richtige sein.
Willst du die Daten nur speichern? Also alle möglichen Kombinationen + das Ergebnis in eine Datenbank und dann daraus abfragen? Wenn ja könnte man eine SQL-Datebank aufsetzen und die dann per C,C#,... abfragen, Libs gibts für fas jede Sprache... Oder soll das irgendwie selbstständig (a la KI) ablaufen?
Im Prinzip könnte man das als Fehlersuche für eine Autowerkstatt sehen. Sprich ich habe ein Problem. Das Auto fährt nicht. Dann habe ich tausend Möglichkeiten warum das nicht sein kann und ich fang an Parameter einzugeben wie z.B. der Auspuff qualmt oder so. Dann gibt es eine Liste an Ursachen die ebn genau das Problem mit dem qualmenden Auspuff enthalten. Ganz oben steht natürlich die wahrscheinlichste. Auf Platz zwei die zweitwahrscheinlichste. Wobei das wahreinschlichste abhängig von der allgemeinen Eintrittswahrscheinlichkeit (sprich was ist meinetwegen bei dem Autotyp oder allgemein die häufigste Ursache) UND den detektierbaren Problemen/Parametern wie ebn dem qualmenden Auspuff abhängig ist. Das Wissen für die Datenbank soll natürlich ständig erweitert werden und sie somit flexibel bleiben... Da ich an so ein Problem noch nie ran gegangen bin wäre ich für jeglichen Input offen. Wie z.B. theoretische Grundlagen und ebn die Programmiersprache. Ich weiß halt wo ich hin will und was ich kann. Den Weg muss ich mir erst erarbeiten.. logischerweise
Phil schrieb: > Da ich an so ein Problem noch nie ran gegangen bin wäre ich für > jeglichen Input offen. Wie z.B. theoretische Grundlagen und ebn die > Programmiersprache. Alles klar. Dein theoretisches Rüstzeug lautet "Expertensystem"
http://www.informatik.uni-leipzig.de/~brewka/lehre1.html weitere Begriffe zum Suchen: "wissensbasiertes system" bzw. "knowledge-based system" "decision theory" "decision-making" "decision support systems" bzw. "DSS" "self service software"
Phil schrieb: > Wobei das wahreinschlichste abhängig von der allgemeinen > Eintrittswahrscheinlichkeit (sprich was ist meinetwegen bei dem Autotyp > oder allgemein die häufigste Ursache) UND den detektierbaren > Problemen/Parametern wie ebn dem qualmenden Auspuff abhängig ist. Demnach: Subjektive Bewertung + detektierbare Parameter Ich möchte jetzt ungern so ein Buzzword rein werfen, aber das sind typische Probleme der Fuzzy-Logic. Beispiele: Riesen Problem + Auspuff qualmt stark -> Folgerung 1 Riesen Problem + Auspuff qualmt ein bisschen -> Folgerung 2 Kleines Problem + Auspuff qualmt ein bisschen -> Folgerung 3 Es handelt sich also um ein Problem mit logischen Verknüpfungen, wobei die logischen Aussagen Wahrscheinlichkeitscharakter haben - das behandelt die Fuzzy-Logic. Vielleicht wirst Du ja auch unter diesem Schlagwort fündig.
Neuronale Netze, machen eigentlich genau das, was Du haben willst. Das hat aber nicht viel mit Datenbanken zu tun. OK, Du kannst die Parametersätze in einer Datenbank speichern. Das ist aber eher trivial. Aus den Datensätzen dann eine Funktion zu finden, die die Parameter optimal auf die ausgegebene "Wahrscheinlichkeit" abbildet, ist hier die Hauptaufgabe. Also neuronale Netze funktionieren prinzipiell so: Man gibt einen Satz Eingangswerte (bei Dir "Parameter") vor und das gewünschte Ausgangssignal (bei Dir "Wahrscheinlichkeit"). Damit trainiert man das System. So macht man das dann für alle Parametersätze. Am Schluss hat man dann ein künstliches neuronales Netz, das (im günstigen Fall ;-) auch bei noch nicht bekannten Parametersätzen vernünftige Ausgabedaten liefert. Habe mal vor Jahren ein wenig mit neuronalen Netzen experimentiert. Interessante Sache. Ich weiß allerdings nicht, ob es inzwischen fortgeschrittene, überlegene Technologien gibt. Bin da momentan nicht am Ball.
>Im Prinzip könnte man das als Fehlersuche für eine Autowerkstatt sehen.
OK, das wäre dann ein klassisches Expertensystem. Das funktioniert aber
gewöhnlich so, dass der Anwender immer wieder Fragen beantwortet oder
Werte eingibt, worauf das System dann entscheidet, welche weiteren
Fakten vom Anwender abgefragt werden. Am Schluss steht dann im Idealfall
die korrekte Antwort des Systems.
Vergiss also das Thema neuronale Netze wieder.
High Performer schrieb: > Neuronale Netze, machen eigentlich genau das, was Du haben willst. neuroanle Netze sind nicht die einzigen Klassifikationsalogrithmen. SVMs mit rbf-Kernel bringen auch sehr oft gute Ergebnisse.
High Performer schrieb: >>Im Prinzip könnte man das als Fehlersuche für eine Autowerkstatt sehen. > > OK, das wäre dann ein klassisches Expertensystem. Naja - hier kommt es darauf an, ob er einen oder mehrere Experten hat, die diese Regeln aufstellen können. Wenn ja, dann ist definitiv das Expertensystem das richtige. Wenn er einfach nur ein Haufen Daten hat, mit der entsprechenden Diagnose, dann würde ich nicht veruschen, das in ein Expertensystem zu quetschen, sondern würde versuchen einen Klassifikator zu finden, der mit den Daten gut umgehen kann. Nachteil ist allerdings, dass man dann alle Einganswerte ermitteln muss, bevor man eine Lösung bekommt. Hier ist das schrittweise auf Regeln basierte Inferenz-System des Expertensystems von großem Vorteil.
Also ich hätte jetzt aufgrund Deiner Angaben an eine Data Warehouse Lösung gedacht. Viele Quellen(User) speichern Daten ine eine Datenbank. Einige Sourcen(z.B. Manager) definieren was sie in welcher Form aus den Daten herauslesen möchten. Möglicherweise liege ich mit meiner Anahme auch komplett falsch. Wenn nicht, nach Datawarehouse, Olap, etc. suchen.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.